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

做公司网站哪家好 上海潍坊优化网站排名

做公司网站哪家好 上海,潍坊优化网站排名,做网站前两个月应该干什么,网站搜索排名查询本文主要简单阐述爬山法的基本算法思想#xff0c;并给出用此算法实现八皇后问题详细过程 最基本的爬上搜索算法表示#xff1a;(节选自《人工智能》第二版)#xff1a; function HILL-CLIMBING(problem) return a state thate is a locak maximum inputs: problem … 本文主要简单阐述爬山法的基本算法思想并给出用此算法实现八皇后问题详细过程 最基本的爬上搜索算法表示(节选自《人工智能》第二版) function HILL-CLIMBING(problem) return a state thate is a locak maximum     inputs: problem     local variables: current, a node                           neighbor,a node     current  MakeNode(INITAL-STATE(problem));     loop do         neighbor  a highest-valued successor of current ;         if VALUE[neighbor] VALUE[current] then return STATE[current];         current  neighbor ; 算法特点 爬山法是一个向值增加的方向持续移动的简单循环过程--类似于登高它将会在到达一个“峰顶”时终止此时相邻状态中没有比它更高的值。这个算法不会维护搜索树因此当前节点的数据结构只需要记录当前状态和它的目标函数值它不会前瞻与当前状态不直接相邻的那些状态的值。这里更高的值是根据具体的应用场景来定的准确的说是更接近目标状态的值由我们设置的启发式函数来决定哪个值更好比如我们求解八皇后问题更高的值就是当前格局中皇后冲突对数最少的情况 算法局限性 爬山法属于一种局部的贪婪搜索方法当它在搜索过程中遇到了局部最大值就很难继续向下搜索了局部极大值是一个比它的每个邻居状态都高得到峰顶但是比全局最大值我们要到达的最终状态要低爬山法算法到达局部极大值附近就会被拉向峰顶然后卡在局部极大值处无处可走。因此产生了爬山法的变种如随机爬山法及其变种如随机爬山法随机重新开始的爬山法模拟退火搜索能够非常有效的解决N皇后问题。 求解八皇后问题 #-*- coding: utf-8 -*- import random#函数一:参数为当前棋盘布局状态根据布局判断当前八皇后布局存在冲突的皇后对数def get_numof_conflict(status):num 0 for i in range(len(status)): for j in range(i 1,len(status)): if status[i] status[j]:num 1offset j - i if abs(status[i]-status[j]) offset:num 1 return num#函数二参数为当前棋盘布局状态利用爬山法思想选择邻居状态最好的布局并返回def hill_climbing(status):convert {}length len(status) for col in range(length):best_move status[col] for row in range(length): if status[col] row: continuestatus_copy list(status)status_copy[col] rowconvert[(col,row)] get_numof_conflict(status_copy) answers [] #最佳后继集合conflict_now get_numof_conflict(status) #当前皇后冲突对数 #遍历存储所有可能后继的字典找出最佳后继 for key,value in convert.iteritems(): if value conflict_now:conflict_now value for key,value in convert.iteritems(): if value conflict_now:answers.append(key) #如果最佳后继集合元素大于一个 随机选择一个 if len(answers) 0:x random.randint(0,len(answers)-1)col answers[x][0]row answers[x][1]status[col] row return status #函数三求得八皇后满足冲突数为0的一个解循环输出每一步的后继集合 直到不存在冲突为止def Queens():status [0,1,2,3,4,5,6,7] #初始状态所有皇后都在对角线 #当存在冲突的个数大于0时 循环求解最佳后继 直到找到八皇后解 while get_numof_conflict(status) 0:status hill_climbing(status) print status print get_numof_conflict(status) print the answer is print print status if __name__ __main__:Queens() 代码说明 : (1)启发式耗散函数 get_numof_conflict求出可以彼此攻击2的皇后对的数  hill_climbing是算法中爬山过程的实现convert字典中存储的键是所有可能后继状态值是此状态对应的皇后冲突对数后面通过遍历来找到最佳后继。爬山法算法通常在最佳后继集合中随机选择一个进行扩展如果这样的后继多于一个的话 (2)  棋盘的排列用列表 status 表示 依次表示第一列第二列到第n列的摆放位置。 如列表[0,2,1] 表示3*3矩阵第一列皇后放在最下面一格,第二列放在最上面一格,第三列放在中间一格 (3) 运行结果说明初始状态每个皇后都在次对角线上 每次运行程序将输出求解一个八皇后正确解的爬山法实现过程 依次输出求解过程每一个最佳选择的邻居状态和其存在的皇后冲突对数,可以看出在求解过程中 不断爬山的过程--每进行一步都达到一个更好的格局冲突次数更少最后一行显示的是八皇后的一个正确解 冲突数为 0 运行截图 本文主要简单阐述爬山法的基本算法思想并给出用此算法实现八皇后问题详细过程 最基本的爬上搜索算法表示(节选自《人工智能》第二版) function HILL-CLIMBING(problem) return a state thate is a locak maximum     inputs: problem     local variables: current, a node                           neighbor,a node     current  MakeNode(INITAL-STATE(problem));     loop do         neighbor  a highest-valued successor of current ;         if VALUE[neighbor] VALUE[current] then return STATE[current];         current  neighbor ; 算法特点 爬山法是一个向值增加的方向持续移动的简单循环过程--类似于登高它将会在到达一个“峰顶”时终止此时相邻状态中没有比它更高的值。这个算法不会维护搜索树因此当前节点的数据结构只需要记录当前状态和它的目标函数值它不会前瞻与当前状态不直接相邻的那些状态的值。这里更高的值是根据具体的应用场景来定的准确的说是更接近目标状态的值由我们设置的启发式函数来决定哪个值更好比如我们求解八皇后问题更高的值就是当前格局中皇后冲突对数最少的情况 算法局限性 爬山法属于一种局部的贪婪搜索方法当它在搜索过程中遇到了局部最大值就很难继续向下搜索了局部极大值是一个比它的每个邻居状态都高得到峰顶但是比全局最大值我们要到达的最终状态要低爬山法算法到达局部极大值附近就会被拉向峰顶然后卡在局部极大值处无处可走。因此产生了爬山法的变种如随机爬山法及其变种如随机爬山法随机重新开始的爬山法模拟退火搜索能够非常有效的解决N皇后问题。 求解八皇后问题 #-*- coding: utf-8 -*- import random#函数一:参数为当前棋盘布局状态根据布局判断当前八皇后布局存在冲突的皇后对数def get_numof_conflict(status):num 0 for i in range(len(status)): for j in range(i 1,len(status)): if status[i] status[j]:num 1offset j - i if abs(status[i]-status[j]) offset:num 1 return num#函数二参数为当前棋盘布局状态利用爬山法思想选择邻居状态最好的布局并返回def hill_climbing(status):convert {}length len(status) for col in range(length):best_move status[col] for row in range(length): if status[col] row: continuestatus_copy list(status)status_copy[col] rowconvert[(col,row)] get_numof_conflict(status_copy) answers [] #最佳后继集合conflict_now get_numof_conflict(status) #当前皇后冲突对数 #遍历存储所有可能后继的字典找出最佳后继 for key,value in convert.iteritems(): if value conflict_now:conflict_now value for key,value in convert.iteritems(): if value conflict_now:answers.append(key) #如果最佳后继集合元素大于一个 随机选择一个 if len(answers) 0:x random.randint(0,len(answers)-1)col answers[x][0]row answers[x][1]status[col] row return status #函数三求得八皇后满足冲突数为0的一个解循环输出每一步的后继集合 直到不存在冲突为止def Queens():status [0,1,2,3,4,5,6,7] #初始状态所有皇后都在对角线 #当存在冲突的个数大于0时 循环求解最佳后继 直到找到八皇后解 while get_numof_conflict(status) 0:status hill_climbing(status) print status print get_numof_conflict(status) print the answer is print print status if __name__ __main__:Queens() 代码说明 : (1)启发式耗散函数 get_numof_conflict求出可以彼此攻击2的皇后对的数  hill_climbing是算法中爬山过程的实现convert字典中存储的键是所有可能后继状态值是此状态对应的皇后冲突对数后面通过遍历来找到最佳后继。爬山法算法通常在最佳后继集合中随机选择一个进行扩展如果这样的后继多于一个的话 (2)  棋盘的排列用列表 status 表示 依次表示第一列第二列到第n列的摆放位置。 如列表[0,2,1] 表示3*3矩阵第一列皇后放在最下面一格,第二列放在最上面一格,第三列放在中间一格 (3) 运行结果说明初始状态每个皇后都在次对角线上 每次运行程序将输出求解一个八皇后正确解的爬山法实现过程 依次输出求解过程每一个最佳选择的邻居状态和其存在的皇后冲突对数,可以看出在求解过程中 不断爬山的过程--每进行一步都达到一个更好的格局冲突次数更少最后一行显示的是八皇后的一个正确解 冲突数为 0 运行截图
http://www.zqtcl.cn/news/607627/

相关文章:

  • 苏州高端网站建设公司建筑人才网报名平台
  • 商品网站开发需求表乐清公共
  • 省级示范校建设网站网站制作企业有哪些公司
  • 单位做网站怎么做510企业网站系统源码
  • 福建人力资源建设网站未成年在线观看视频播放免费
  • 网站站内logo怎么做朋友圈广告30元 1000次
  • 绍兴做网站北京做公司网站
  • 青浦区网站建设公司商丘网站建设费用
  • 百度网站是怎么建设的wordpress媒体主题
  • 孝感网站建设xgsh国内比百度好的搜索引擎
  • 阅读网站怎样做网站右侧固定标题怎么做
  • 网站开发多少钱农民wordpress acf破解版
  • 厦门网站建设培训云南最便宜的网站建设
  • 吉安手机网站建设html网页布局
  • wordpress英文文章格式怎样给网站做优化
  • 新网站友链网店托管公司
  • 期末作业制作网站网站上传根目录
  • 新网站不被收录的原因兰州网络seo公司
  • 男生可以做网站编辑工作吗网站域名跟谁买
  • 我市精神文明建设的门户网站做网站需要写代码
  • 新网站推广网站搜索引擎优化的步骤
  • 网站建设20推广公司网站建设推广方案
  • 如何设计酒店网站建设好的交互网站
  • 怎么把自己的网站放到百度上九亭做网站
  • 张家界旅游网站建设网页设计作品欣赏分析
  • 订阅号自定义可以做链接网站不做网站dreamwa
  • 电子商务网站规划的原则做网站的集群方案
  • 山东建设银行怎么招聘网站自己做商城网站
  • 建设网站成本预算网站页面设计尺寸
  • 微官网和微网站首页房产网怎么查到房产