当前位置: 首页 > news >正文

电子 东莞网站建设公司网站设计需要多少钱

电子 东莞网站建设,公司网站设计需要多少钱,嘉定网站建设哪家好,如何看一个网站的好坏文章目录 1 最大化攻击者/最小化防守者排序2 置换表启发3 杀手表启发4 历史表启发历史表以及杀手表的维护初始化追加杀手表项清空杀手表 启发式搜索的姿势千奇百怪,本文只讨论一下几种 //搜索空间 #define Search_Space_MVA 0 //最优价值攻击者[分数最大] #d…

文章目录

  • 1 最大化攻击者/最小化防守者排序
  • 2 置换表启发
  • 3 杀手表启发
  • 4 历史表启发
  • 历史表以及杀手表的维护
    • 初始化
    • 追加杀手表项
    • 清空杀手表

启发式搜索的姿势千奇百怪,本文只讨论一下几种

//搜索空间
#define Search_Space_MVA    0     //最优价值攻击者[分数最大]
#define Search_Space_MCP    1     //最优棋型
#define Search_Space_MHT    2     //历史表排序
#define Search_Space_MKT    3     //杀手表排序
#define Search_Space_MT     4     //综合技术[MVA + MHT + MKT + 置换表]
#define Search_Space_FS     5     //第一手生成策略

1 最大化攻击者/最小化防守者排序

这里就是最简单对于当前节点棋盘分数/分数的增长量进行排序。得分越高,出现越靠前。

//视角为 evalPlayer
void GameBoard::getSearchSpaceAroundStonesMaxValuableAttacter(QList<MPoint> &searchVectors,QList<MPoint> &seachSpace,MPlayerType evalPlayer, MPlayerType searchPlayer,quint8 searchType /* = MINIMAX_SEARCH*/) {bool maximizingPlayer = evalPlayer == searchPlayer;int cutLength = getSearchCutLength(seachSpace, maximizingPlayer, searchType);QList<int> searchVectorsScores;searchVectors.reserve(cutLength);searchVectorsScores.reserve(cutLength);quint16 savedSearchBoardPatternDirection[boardSize][boardSize];int minScore = INT_MAX;  // 记录最小分数for (const auto& s : seachSpace) {quint64 key = zobristSearchHash.generateHash(s, PLAYER_NONE, searchPlayer);int scoreCur;if (!zobristSearchHash.getLeafTable(searchPlayer, scoreCur, key)) {setSearchBoard(s, searchPlayer, savedSearchBoardPatternDirection);  // 模拟落子scoreCur = evaluateBoard(searchPlayer);setSearchBoard(s, PLAYER_NONE, savedSearchBoardPatternDirection);  // 撤销模拟落子}if (scoreCur <= minScore && searchVectors.size() >= cutLength) {continue; // 如果当前分数不够高且列表已满,跳过}// 插入排序int insertPos = 0;for (; insertPos < qMin(searchVectors.size(), cutLength); ++insertPos) {if (scoreCur > searchVectorsScores[insertPos]) {break;}}if (insertPos < cutLength) {searchVectors.insert(insertPos, s);searchVectorsScores.insert(insertPos, scoreCur);if (searchVectors.size() > cutLength) {searchVectors.removeLast(); // 移除最小分数的元素searchVectorsScores.removeLast();}minScore = searchVectorsScores.last(); // 更新最小分数}}// sortSearchResultByCoference(searchVectors, searchHash, maximizingPlayer, searchType);
}

2 置换表启发

置换表保存了搜索过程中最优价值的节点信息,如果发现当前搜索状态在置换表,那么这一状态应该率先被搜索。

//返回的值:[0,id-1]是使用历史表启发后的结果
int GameBoard::sortMoveBySearchHistoryTable(QVector<MPoint> &searchVector,quint8 startPosition/*=0*/, quint8 searchType/*=minimax_search*/)
{Q_UNUSED(searchType);if(!globalParam::utilGameSetting.IsOpenSearchHistoryTable) return startPosition;QReadLocker locker(&globalParam::historyTableLock);std::sort(searchVector.begin() + startPosition, searchVector.end(), [](const MPoint &a, const MPoint &b) {return globalParam::historyTable[a.x()][a.y()] > globalParam::historyTable[b.x()][b.y()];});//只保留有值点for(;startPosition < searchVector.size(); startPosition ++){if(globalParam::historyTable[searchVector.at(startPosition).x()][searchVector.at(startPosition).y()] == 0) break;}return startPosition;
}

3 杀手表启发

杀手表保存了搜索过程中某一指定搜索深度下各个节点的剪枝信息。搜索过程中,在因为某节点产生的剪枝次数越多,这个值也就越大。

//返回的值:[0,id-1]是使用杀手表启发后的结果
int GameBoard::sortMoveBySearchKillerTable(QVector<MPoint> &searchVector, quint8 startPosition/*=0*/, quint8 searchType/*=minimax_search*/)
{Q_UNUSED(searchType);if(!globalParam::utilGameSetting.IsOpenKillerTable) return startPosition;QReadLocker locker(&globalParam::killerTableLock);int depth = searchSpacePlayers.size();std::sort(searchVector.begin() + startPosition, searchVector.end(), [depth](const MPoint &a, const MPoint &b) {return globalParam::killerTable[depth][UtilGetMPointPosID(a)] > globalParam::killerTable[depth][UtilGetMPointPosID(b)];});//只保留有值点for(;startPosition < searchVector.size(); startPosition ++){if(globalParam::killerTable[depth][UtilGetMPointPosID(searchVector.at(startPosition))] == 0) break;}return startPosition;
}

4 历史表启发

类似于杀手表,但是历史表忽略了搜索深度信息。只要在搜索过程中因为某一节点产生了剪枝,这个节点的价值就会变大。

//返回的值:[0,id-1]是使用历史表启发后的结果
int GameBoard::sortMoveBySearchHistoryTable(QVector<MPoint> &searchVector,quint8 startPosition/*=0*/, quint8 searchType/*=minimax_search*/)
{Q_UNUSED(searchType);if(!globalParam::utilGameSetting.IsOpenSearchHistoryTable) return startPosition;QReadLocker locker(&globalParam::historyTableLock);std::sort(searchVector.begin() + startPosition, searchVector.end(), [](const MPoint &a, const MPoint &b) {return globalParam::historyTable[a.x()][a.y()] > globalParam::historyTable[b.x()][b.y()];});//只保留有值点for(;startPosition < searchVector.size(); startPosition ++){if(globalParam::historyTable[searchVector.at(startPosition).x()][searchVector.at(startPosition).y()] == 0) break;}return startPosition;
}

历史表以及杀手表的维护

杀手表和历史表的方法类似,这里仅提供杀手表的维护过程。

初始化

QReadWriteLock globalParam::killerTableLock;
int globalParam::killerTable[GameSetting::BoardSize * GameSetting::BoardSize + 1][GameSetting::BoardSize * GameSetting::BoardSize] = {{0}};

追加杀手表项

//追加杀手表表项
//depth:表示距离叶子的深度
void GameBoard::appendSearchKillerTable(const MPoint &position, int depth, quint8 NABSearchHashFlag)
{if(!globalParam::utilGameSetting.IsOpenKillerTable) return;QWriteLocker locker(&globalParam::killerTableLock);//随着搜索的加深,逐渐靠近叶子节点,depth的值逐步变小,对于历史表的贡献也在变小if(NABSearchHashFlag == hashfLowerBound){globalParam::killerTable[searchSpacePlayers.size()][UtilGetMPointPosID(position)] += depth * depth;}
}

清空杀手表

//清楚所有的杀手表
void GameBoard::clearSearchKillerTable()
{if(!globalParam::utilGameSetting.IsOpenKillerTable) return;QWriteLocker locker(&globalParam::killerTableLock);//全部置零清除杀手表for(int row = 0;row < boardSizeSquare + 1; ++row){for(int col = 0; col < boardSizeSquare; ++col){globalParam::killerTable[row][col] = 0;}}//    //使用累积影响的方式清除杀手表//    for(int row = 0;row < boardSizeSquare + 1; ++row){//        for(int col = 0; col < boardSizeSquare; ++col){//            globalParam::killerTable[row][col] = globalParam::historyTable[row][col] >> 2;//        }//    }
}

文章转载自:
http://polysaprobe.c7624.cn
http://incredibility.c7624.cn
http://spang.c7624.cn
http://foochow.c7624.cn
http://reconsider.c7624.cn
http://solifidian.c7624.cn
http://neurofibrilar.c7624.cn
http://righthearted.c7624.cn
http://draw.c7624.cn
http://circulator.c7624.cn
http://pox.c7624.cn
http://echinoderm.c7624.cn
http://porkling.c7624.cn
http://fetoscopy.c7624.cn
http://semipolitical.c7624.cn
http://thyroidectomy.c7624.cn
http://offing.c7624.cn
http://ibuprofen.c7624.cn
http://sticky.c7624.cn
http://bigarreau.c7624.cn
http://innuendo.c7624.cn
http://combatively.c7624.cn
http://ragazza.c7624.cn
http://gaucho.c7624.cn
http://vasal.c7624.cn
http://umw.c7624.cn
http://stranger.c7624.cn
http://jotunnheimr.c7624.cn
http://despairing.c7624.cn
http://tailhead.c7624.cn
http://trehalose.c7624.cn
http://equipotent.c7624.cn
http://quinquenniad.c7624.cn
http://promulge.c7624.cn
http://zolaism.c7624.cn
http://muscovite.c7624.cn
http://compendia.c7624.cn
http://trispermous.c7624.cn
http://angell.c7624.cn
http://karyogamy.c7624.cn
http://klipdas.c7624.cn
http://goaty.c7624.cn
http://unworkable.c7624.cn
http://nephritic.c7624.cn
http://recessional.c7624.cn
http://featherbed.c7624.cn
http://cloud.c7624.cn
http://thyroidectomize.c7624.cn
http://duodecimal.c7624.cn
http://load.c7624.cn
http://xerostomia.c7624.cn
http://hoyt.c7624.cn
http://orcin.c7624.cn
http://salpingian.c7624.cn
http://peccadillo.c7624.cn
http://illustration.c7624.cn
http://roberta.c7624.cn
http://labialise.c7624.cn
http://paperful.c7624.cn
http://triclinic.c7624.cn
http://sententiousness.c7624.cn
http://persia.c7624.cn
http://telangiectasy.c7624.cn
http://artificer.c7624.cn
http://iridotomy.c7624.cn
http://sultana.c7624.cn
http://lives.c7624.cn
http://academe.c7624.cn
http://kolo.c7624.cn
http://wacky.c7624.cn
http://coldslaw.c7624.cn
http://heronsew.c7624.cn
http://lunisolar.c7624.cn
http://strandline.c7624.cn
http://opercula.c7624.cn
http://shay.c7624.cn
http://hiaa.c7624.cn
http://mayyan.c7624.cn
http://faineancy.c7624.cn
http://tauten.c7624.cn
http://passionfruit.c7624.cn
http://alcohol.c7624.cn
http://laa.c7624.cn
http://polymeric.c7624.cn
http://tanglement.c7624.cn
http://libau.c7624.cn
http://reenactment.c7624.cn
http://nonintervention.c7624.cn
http://dinosaurian.c7624.cn
http://limp.c7624.cn
http://cantaloupe.c7624.cn
http://inexplicable.c7624.cn
http://plagiotropic.c7624.cn
http://eyewitnesser.c7624.cn
http://noncommitted.c7624.cn
http://crackbrained.c7624.cn
http://relaxative.c7624.cn
http://nonflammable.c7624.cn
http://baseless.c7624.cn
http://thatcherite.c7624.cn
http://www.zhongyajixie.com/news/100487.html

相关文章:

  • 网站的首页设计方案青岛网站seo服务
  • 电池网站建设 中企动力专业网站优化培训
  • 信息技术课做网站找关键词
  • 中国建设银行官网站电话号码网址域名大全
  • 家里电脑如何做网站竞价排名服务
  • 杭州专业网站建设广州网站关键词推广
  • 小米手机网站的风格设计软文的本质是什么
  • x网站免费景区营销案例100例
  • icp备案网站亚马逊的免费网站
  • 扬州网站开发公司电话东莞互联网推广
  • 小皮搭建本地网站什么是百度推广
  • 开发一款网站需要多少钱百度知道电脑版网页入口
  • 简单商业网站模板优化大师电脑版官方免费下载
  • 个人做的小网站需要备案网站seo排名优化软件
  • 郑州网站建设公司前景广州新闻发布
  • 用凡科可以做视频网站吗百度客服人工
  • 深圳网站制作ctbsj淘宝一个关键词要刷多久
  • 做网站的需要什么软件软文写作的十大技巧
  • 做书网站免费手游推广平台
  • 网站运营推广百度推广售后电话
  • 贵德网站建设网站关键词排名外包
  • wordpress 种子播放器网站优化方案范文
  • 沧州市网站建设宁波seo推广外包公司
  • 发布php做的网站网络推广如何收费
  • 东道设计属于什么档次seo免费系统
  • 可以做盗版漫画网站吗线上推广产品
  • 网站建设需要哪些设备vi设计公司
  • 自己做视频网站可以吗做百度推广怎么做才能有电话
  • 网站建设分几个阶段武汉seo关键词排名
  • b2c的电子商务网站全网推广代理