我的一个朋友开始构建一个NetHack bot(一个玩Roguelike游戏的机器人:NetHack).类似的游戏Angband有一个非常好的工作机器人,但它部分工作,因为回到城镇很容易,并总是能够低水平获得物品.
在NetHack中,问题要困难得多,因为游戏奖励了鼓舞人心的实验,并且基本上构建为1000个边缘案例.
最近我建议使用某种天真的贝叶斯分析,就像创建垃圾邮件一样.
基本上,机器人首先会建立一个语料库,通过尝试每个可能的行动来查找它所发现的每个物品或生物,并将这些信息存储起来,例如,死亡的接近程度,负面影响的伤害.随着时间的推移,您似乎可以生成一个合理的可玩模型.
任何人都能指出我们正确的方向是一个良好的开端吗?我是在吠叫错误的树还是误解了贝叶斯分析的想法?
编辑:我的朋友提出了他的NetHack补丁的github回购,允许python绑定.它仍处于一个非常原始的状态,但如果有人感兴趣...
为了在我的Android应用程序中保持状态,以便用户将返回到他们中断的活动,我在我的清单中设置了非常有用的标志alwaysRetainTaskState:
<activity android:name=".Main"
android:label="@string/app_name"
android:alwaysRetainTaskState="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
这可以完成工作,或者我认为; 我发现系统仍然可以破坏我的应用程序的活动以保留内存,同时仍保持状态.为了验证这一点,我写了一个小测试应用程序,它在循环中创建了一大堆活动,以查看我的应用程序的活动是否会被销毁.果然,系统会破坏我的活动.
通过一些阅读,我发现我需要使用onSaveInstanceState()和onRestoreInstanceState()来帮助维护活动状态.
为了解决我的问题,假设我有一个包含许多全局变量的Activity,其中一些是静态的,有些则不是.它们由布尔,arraylists,字符串等组成.我的问题是,当一个活动被销毁时,我很困惑这些变量中的哪一个是持久的.我应该在onSaveInstanceState()中打包哪些包?当活动被销毁时,系统是否对这些变量做了什么?
我的程序成功创建并填充了Excel(.xls)文件.一旦创建,我希望在系统的默认程序(在我的情况下为Excel)中打开新文件.我怎样才能做到这一点?
对于我想在记事本中打开txt文件的旧程序,我使用了以下内容:
if (!Desktop.isDesktopSupported()) {
System.err.println("Desktop not supported");
// use alternative (Runtime.exec)
return;
}
Desktop desktop = Desktop.getDesktop();
if (!desktop.isSupported(Desktop.Action.EDIT)) {
System.err.println("EDIT not supported");
// use alternative (Runtime.exec)
return;
}
try {
desktop.edit(new File(this.outputFilePath));
} catch (IOException ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将此代码用于Excel文件时,它会给我以下错误:
java.io.IOException: Failed to edit file:C:/foo.xls
Run Code Online (Sandbox Code Playgroud)
建议?
strcmp,当喂到strtok的结果时,在下面的代码中似乎是公然对我撒谎.
int fSize;
char * buffer=NULL;
char * jobToken = "job";
char * nextToken=NULL;
job * curJob=NULL;
struct node * head=NULL;
struct node * parseList(FILE* file){
fseek(file,0,SEEK_END);
fSize=ftell(file);
buffer = (char*)malloc(fSize+1);
printf("%d chars: reading buffer now:\n",fSize);
fseek(file,0,SEEK_SET);
fread (buffer,1,fSize,file);
nextToken = strtok(buffer, " \n");
while (nextToken!=NULL){
printf("**Running Token: %s**\n",nextToken);
if (strcmp(nextToken,jobToken)){
printf("Accepted %s as %s\n",nextToken,jobToken);
}else{
printf("not %s, %s\n",jobToken,nextToken);
}
printf("End of state - %s\n",nextToken);
nextToken = strtok(NULL, " \n");
}
free (buffer);
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
将此输入放在parseList参数的文件中:
job 23
job …Run Code Online (Sandbox Code Playgroud) 不,不是ASCII图形,请看这里的截图:
http://en.wikipedia.org/wiki/W3m
这怎么可能呢?
我检查了源,它只打印字符序列.但是,我无法在xterm文档或其他地方找到任何对图形绘制或图像嵌入转义序列的引用.
w3m似乎也是唯一这样做的软件.
这里是矢量图形泰克仿真,但是这是在VT模式下进行.
也许我在寻找错误的东西?
任何的想法?
我想用“添加”按钮制作一个表格。按“添加”按钮后,新面板将添加到检票口 ListView 元素。我怎么做?我希望能够添加无限数量的行。
编辑:
InteractivePanelPage.html
<table>
<tr>
<td><a href="#" wicket:id="addPanelLink">Add Panel</a></td>
</tr>
<tr wicket:id="interactiveListView">
<td>
<span wicket:id="interactiveItemPanel"></span>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
交互式面板页面
// ... imports
public class InteractivePanelPage extends WebPage {
public LinkedList<InteractivePanel> interactivePanels = new LinkedList<InteractivePanel>();
private ListView<InteractivePanel> interactiveList;
public InteractivePanelPage() {
add(new AjaxLink<String>("addPanelLink") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
try {
System.out.println("link clicked");
InteractivePanel newInteractivePanel = new InteractivePanel(
"interactiveItemPanel");
newInteractivePanel.setOutputMarkupId(true);
interactiveList.getModelObject().add(newInteractivePanel);
} catch (Exception e) {
e.printStackTrace();
}
}
});
interactivePanels.add(new …Run Code Online (Sandbox Code Playgroud) 我正在开发一个可以同时连接到多个URL的站点(我们希望每分钟达到600个),无论我尝试什么,总有数千个TIME_WAIT仍然打开.我知道这些对于TCP连接至关重要,但它们正在使用所有可用的端口.PHP没有SO_REUSEPORT,SO_REUSEADDR不适用于远程连接.这是代码的开头:
$s = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($s, SOL_SOCKET, SO_LINGER,array('l_linger'=>0, 'l_onoff'=>0)); //I have tried l_onoff=1
socket_set_option($s, SOL_SOCKET, SO_RCVTIMEO,array('sec'=>0,'usec'=>500000));
socket_set_option($s, SOL_SOCKET, SO_SNDTIMEO,array('sec'=>0,'usec'=>500000));
socket_set_option($s, SOL_SOCKET, SO_KEEPALIVE,0);
socket_set_option($s, SOL_SOCKET, SO_REUSEADDR,1);
socket_set_nonblock($s);
socket_bind($s,$ip,0);
socket_connect($s,$host,$port);
Run Code Online (Sandbox Code Playgroud)
$ s进入一个包含所有挂起写入的数组,在写入后我们调用socket_shutdown($ s,1); 关闭套接字上的写入.然后读完后我们:
socket_shutdown($s,2); socket_close($s);
Run Code Online (Sandbox Code Playgroud)
所有读取和写入都是在while循环中完成的,循环最多有12个并发连接,如果没有命中,则继续进行并继续向数组添加另一个URL.每个循环调用socket_select,超时为0.
有没有人有什么建议?我想提高速度并减少netstat中出现的TIME_WAIT.
谢谢James Hartig
我有一个字符串:
char * someString;
Run Code Online (Sandbox Code Playgroud)
如果我想要这个字符串的前五个字母并想要设置它otherString,我该怎么做?
我有以下一点代码:
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
template<typename Iterator>
void foo(Iterator begin, Iterator end)
{
typedef typename std::iterator_traits<Iterator>::value_type type;
type smallest = (*std::min_element(begin,end));
std::cout << smallest << std::endl;
}
int main()
{
std::list<int> l;
l.push_back(1);
l.push_back(2);
foo(l.begin(),l.end());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译它如下:
g++ -pedantic -ansi -Wall -Werror -O2 -o test test.cpp
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
cc1plus: warnings being treated as errors
In function ‘int main()’:
cc1plus: error: dereferencing pointer ‘pretmp.163’ does break strict-aliasing rules
cc1plus: note: initialized from here
Run Code Online (Sandbox Code Playgroud)
O3可以看到此错误,但O1不会出现此错误.我使用了在线编译器,MS VC9.0和icc v11编译了代码,并且在所有情况下代码编译都没有问题. …
下面的代码不会更改所有ListView's行的文本,因为getChildCount()它不会获取所有ListView's行,而只会获取可见的行.
for (int i = 0; i < listView.getChildCount(); i++)
{
View v = listView.getChildAt(i);
TextView tx = (TextView) v.findViewById(R.id.mytext);
tx.setTextSize(newTextSize);
}
Run Code Online (Sandbox Code Playgroud)
所以我该怎么做?
当ListView's行变得可见时是否有用于获取通知的代码,因此我可以设置其文本大小?