我有时会编写程序来玩棋盘游戏.基本策略是标准的alpha-beta修剪或类似的搜索,有时通过终结游戏或开放的常用方法来增强.我主要使用国际象棋变体,所以当需要选择我的评估功能时,我会使用基本的国际象棋评估功能.
但是,现在我正在编写一个程序来玩一个全新的棋盘游戏.我如何选择一个好的甚至是体面的评估函数?
主要的挑战是相同的棋子总是在棋盘上,因此通常的材料功能不会根据位置而改变,并且游戏的播放次数不到一千次左右,所以人类不一定玩得太多还没有给出见解.(PS.我考虑过MoGo方法,但随机游戏不太可能终止.)
游戏细节:游戏在10×10的棋盘上进行,每侧固定6个棋盘.这些作品具有一定的运动规则,并以某种方式相互作用,但没有任何一块被捕获.游戏的目标是在棋盘上的某些特殊方块中放置足够的棋子.计算机程序的目标是提供与当前人类玩家竞争或更好的玩家.
artificial-intelligence machine-learning game-theory evaluation-function alpha-beta-pruning
我有以下数据结构:
struct Inner
{
int myValue;
};
struct Outer
{
Inner* inner;
};
Run Code Online (Sandbox Code Playgroud)
选项1
如果我执行以下操作:
Outer outer;
outer.inner = NULL;
outer.inner = new inner;
inner* pInner = outer.inner;
Run Code Online (Sandbox Code Playgroud)
然后为以下2个值添加监视:
那么它们都是非NULL,并且值相等.
选项2
如果我执行以下操作:
Outer outer;
outer.inner = NULL;
inner* pInner = outer.inner;
if (! pInner)
{
pInner = new inner;
}
Run Code Online (Sandbox Code Playgroud)
然后pInner指向有效的堆内存,而outer.inner仍为NULL.
问题
为什么选项不同 - 它们是否应该同时指向选项2中的相同内存?
假设我使用选项1,然后我从内部读取值.然后我可以互换使用pInner和outer.inner不能吗?为什么分配内存会有所不同?
我开始学习ocaml,我非常欣赏语言中递归的力量.但是,我担心的一件事是堆栈溢出.
如果ocaml使用堆栈进行函数调用,它最终是否会溢出堆栈?例如,如果我有以下功能:
let rec sum x =
if x > 1 then f(x - 1) + x
else x;;
Run Code Online (Sandbox Code Playgroud)
它必须最终导致堆栈溢出.如果我在c ++(使用递归)中做相同的事情,我知道它会溢出.
所以我的问题是,是否有内置的安全措施来防止函数式语言溢出堆栈?如果不是这样,它们是不是没那么有用,因为上面的求和算法,用带有for循环的过程样式编写,可以处理任何数字(不相关的整数溢出)?
stack-overflow functional-programming imperative-programming tail-call-optimization
我正在编写一个将XML文件导入SQLite数据库的Windows服务.
有3,000条奇怪的记录需要创建,我正在使用SubSonic 2.2进行项目.
而不是循环遍历列表并逐个将它们添加到数据库中,有一种方法可以一次批量查询多个新记录.
我知道3.x中的"BatchQuery"对象会帮助我,但我希望2.x中有一些东西可以执行类似的任务.
先谢谢道格
我搜索了SO,找到了关于负面测试的小事,这也是开发人员在工作中应该记住的一件非常重要的事情.如何为负面测试开发人员列出前十大测试用例应该记住协同工作?
谢谢!
负面测试的定义:
在软件测试中,一种测试旨在确定系统在定义之外的响应.它旨在确定系统是否因意外输入而崩溃.
我正在创建一个表单,用户可以使用预设值指定开始和结束时间.我想在一天内的上午9点到下午5点之间生成一个15分钟间隔的字符串表示列表.
任何人都可以帮助我如何使UIPickerView在最后一行的值之后显示第一行的值,就像UIDatePicker在12之后将跟随1.
谢谢
从这个问题来看,我现在正在进行一级错误处理.也就是说,我调用一个调用另一个更大函数的函数,我希望它在更大的函数中失败,而不是在较小的函数中.具体的例子.代码是:
import sys, os
def workerFunc():
return 4/0
def runTest():
try:
print workerFunc()
except:
ty,val,tb = sys.exc_info()
print "Error: %s,%s,%s" % (
ty.__name__,
os.path.split(tb.tb_frame.f_code.co_filename)[1],
tb.tb_lineno)
runTest()
Run Code Online (Sandbox Code Playgroud)
输出是:
Error: ZeroDivisionError,tmp2.py,8
Run Code Online (Sandbox Code Playgroud)
但第8行是"print workerFunc()" - 我知道该行失败了,但我想要之前的行:
Error: ZeroDivisionError,tmp2.py,4
Run Code Online (Sandbox Code Playgroud) 是否有以下的Visual C++版本(在GCC中)?
__builtin_return_address
__builtin_frame_address
参考 - http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html
如果没有,有没有办法模仿它们?
谢谢.
假设一个空浏览器缓存 - 如何仅通过应用HTML/CSS/JavaScript代码更改来加快网页加载速度?
这意味着,不建议使用CDN等移动服务器.只需更改代码以使其加载速度更快.
c++ ×2
.net ×1
batch-file ×1
c# ×1
css ×1
exception ×1
g++ ×1
game-theory ×1
gcc ×1
heap ×1
html ×1
iphone ×1
javascript ×1
objective-c ×1
pointers ×1
python ×1
subsonic ×1
testing ×1
transactions ×1
uipickerview ×1
visual-c++ ×1