好的,所以我一直在为我的国际象棋程序工作一段时间,我开始碰壁了.我已经完成了所有的标准优化(negascout,迭代深化,杀手动作,历史启发式,静态搜索,典当位置评估,一些搜索扩展),我完全没有想法!
我希望尽快让它多线程化,这应该会给我带来很好的性能提升,但除此之外还有其他任何狡猾的技巧吗?我考虑过切换到MDF(f),但我听说这是一个麻烦,并不值得.
我最感兴趣的是某种学习算法,但我不知道是否有人用国际象棋程序有效地完成了这项工作.
那么,切换到一块板有意义吗?我目前正在使用0x88.
我一直在寻找几个小时,但还没有为这种拼图找到一个完全可行的解决方案.所以我跟主教跟着类似的问题.
我需要做的是以这样的方式在棋盘上放置12个骑士,使得棋盘的所有自由方格都被至少一件攻击.
最终结果应如下所示:
问题是 我的程序只尝试与最后两个部分的不同组合,然后以某种方式崩溃. EDITED
到目前为止我做了什么:
#include <iostream>
using namespace std;
#define N 8
void fillChessBoard(int (&chessBoard)[N][N], int num);
void printChessBoard(int (&chessBoard)[N][N]);
void removeKnight(int (&chessBoard)[N][N], int i, int j);
void placeKnight(int (&chessBoard)[N][N], int i, int j);
bool allSpaceDominated(int (&chessBoard)[N][N]);
bool backtracking(int (&chessBoard)[N][N], int pos);
int main()
{
int chessBoard[N][N];
fillChessBoard(chessBoard, 0);
backtracking(chessBoard, 0);
return 0;
}
bool backtracking(int (&chessBoard)[N][N], int knightNum)
{
if(knightNum==12)
{
if(allSpaceDominated(chessBoard))
{
printChessBoard(chessBoard);
return true;
}
else return false;
}
else
{
for(int i=0; i<N; …
Run Code Online (Sandbox Code Playgroud) 我打算制作一个与UCI国际象棋引擎接口的程序.我一直在做一些研究,但是在我深入了解它之前,我想获得更多信息.我想知道你们中是否有人可以在UCI引擎和前端程序之间提供一些示例"交换".我并不真正关心实际的接口代码(比如发送/接收命令),这应该很简单.我只想尝试一些小游戏和一些选项的好例子.我目前正在使用鳕鱼引擎,但我希望能够使用多个引擎.
无论如何,我正在寻找一些如何在UCI上玩游戏的例子.
const int BitTable[64] = {
63, 30, 3, 32, 25, 41, 22, 33, 15, 50, 42, 13, 11, 53, 19, 34, 61, 29, 2,
51, 21, 43, 45, 10, 18, 47, 1, 54, 9, 57, 0, 35, 62, 31, 40, 4, 49, 5, 52,
26, 60, 6, 23, 44, 46, 27, 56, 16, 7, 39, 48, 24, 59, 14, 12, 55, 38, 28,
58, 20, 37, 17, 36, 8
};
int pop_1st_bit(uint64 *bb) {
uint64 b = *bb ^ (*bb …
Run Code Online (Sandbox Code Playgroud) 我对微小的优化并不感兴趣,因为速度很低.我对alpha-beta搜索最重要的启发式方法感兴趣.而评估功能最重要的组成部分.
我对具有最大(改进/ code_size)比率的算法特别感兴趣.(不是(改进/复杂性)).
谢谢.
PS杀手移动启发式是一个完美的例子 - 易于实现和强大.启发式数据库太复杂了.
我想尝试写下国际象棋AI.有什么我可以在.NET框架上使用(或者甚至可能是在Lua中编写的国际象棋程序),这些东西可以让我编写和测试国际象棋AI而不用担心实际制作国际象棋游戏吗?
我有一个简单的棋盘在JPanel
与GridLayout(8,8)
作为布局管理器.
我正在尝试为字段的列名和行号添加面板.
现在我已经创建了另一个面板BorderLayout
作为布局管理器,在这个面板中我添加了板BorderLayout.CENTER
.旁边的板本身我添加了一个面板GridLayout(0,8)
中BorderLayout.SOUTH
和面板GridLayout(8,0)
中BorderLayout.WEST
.行数完全放在电路板旁边,因为左侧JPanel中的行数与电路板中的行数相匹配,但列名称(A,B,C,D,E,F,G,H)在由于JPanel的原因,板下的JPanel放置不正确BorderLayout.WEST
.
如何制作带侧板的合适棋盘以显示场地编号/名称?
我已经尝试将南面板的布局设置为GridLayout(0,9)
第一个字段为空,但左面板的宽度不等于电路板中的每个字段,因此这不是一个好的解决方法.
我正在尝试研究如何将鳕鱼(或任何UCI兼容引擎)集成到我的Android应用程序中.
我从这里下载了鳕鱼Android zip: 下载Stockfish引擎.
在zip的Android目录下有两个文件:
我有两个问题:
谢谢!
chess ×10
algorithm ×4
java ×2
android ×1
backtracking ×1
c ×1
c++ ×1
grid-layout ×1
heuristics ×1
interface ×1
linux ×1
recursion ×1
search ×1
statistics ×1
swing ×1
uci ×1