@基于蒙特卡罗树搜索的智能行程规划系统设计

基于蒙特卡罗树搜索的智能行程规划系统设计DEMO0.1

github链接.https://github.com/blue-sky-sea/MCTS-TRAVEL-PLAN

(一)使用Googlemap API收集旅行点数据

以东京都横滨市为例

使用googlemaps库。google开发者的key自行申请。

googlemaps库的文档在此.

1.一个简单的例子如下:

#例子
#import库
import googlemaps#获取client
gmaps = googlemaps.Client(key='你的googlemapkey')#Places search
#查找 横滨红砖仓库 相关的地点
places_result = gmaps.places(query="横滨红砖仓库",location="35.4525944, 139.6428944",language="zh")

2.利用xlwt,将数据写入xls

#横滨预选的景点(我去过的大众景点hhh)
candidate_places_name_yokohama = ["山下公园","横滨红砖仓库","横滨未来21","横滨中华街","GUNDAM FACTORY YOKOHAMA","橫濱宇宙樂園","合味道纪念馆","Shin-Yokohama Raumen Museum","三溪园","横滨地标大厦","横滨面包超人儿童博物馆","横滨美术馆"]
import xlwt#导入xlwt库
workbook = xlwt.Workbook(encoding = 'ascii')#创建workbook
worksheet = workbook.add_sheet('Yokohama spot') #添加名叫Yokohama spot的sheetn=0
for spotname in candidate_places_name_yokohama:places_result = gmaps.places(query=spotname,location="35.4525944, 139.6428944",language="zh")#print(i)item=places_result['results'][0]print(spotname,":",item['place_id'],item['name'],item['geometry']['location'],item['formatted_address'])worksheet.write(n, 0, item['place_id'])#写入xls的n行0列worksheet.write(n, 1, item['name'])worksheet.write(n, 2, str(item['geometry']['location']))worksheet.write(n, 3, item['formatted_address'])n=n+1
workbook.save('/Users/liuyi/Desktop/Ttravel-Master/Main/DATA/Yokohama_spot.xls') #保存到xls路径

3.类似的方法,制作景点之间的交通数据集

就省略了。因为是demo所以数据集里面交通花费的时间和金钱都是一个确定的值。

4.根据需求对数据集里没有的数据进行人工添加(因为谷歌API没找到相关数据)

比如:

1.该地点是否更适合亲子/情侣游玩

2.更适合游玩的时间段(白天/晚上?)

3.附加的地点属性(二次元/购物/夜景/等)

4.特殊属性(横滨中华街新年活动等)

5.等

(二)利用MCTS interface构建AI-demo

MCTS interface 在这个地址,是github上一个大佬的,我感觉是我找到的最简洁的最好用的MCTS interface了
MCTS interface在此.

其中mcts.py中几乎不需要改什么代码
我们需要做的是完善exampleInterface.py中的方法
通过修改exampleInterface.py,我们就可以用mcts算法创造出五子棋AI,口袋妖怪AI或者是我们的智能行程AI啦
(根据目标特性的不同,code里面的方法)

(三)利用MCTS interface构建AI-demo的要点

这是马蜂窝上横滨的人气景点地图
上面没有显示高达工厂

1.在本demo中,为了方便我只考虑在横滨一天的简单行程规划。

2.设定早上开始时间为9点(已经在樱木町车站前),晚上结束时间最好是在20点前。

3.设定用户的预算,行程偏好(亲子/情侣/购物/等)

4.没有考虑午饭晚饭和住宿,而实际上根据我在问卷星上的调查,美食和住宿等的质量和花费实际上是最受用户关注

5.没有考虑天气因素和特殊事件等,实际规划应该要有

6.根据用户的偏好,对应景点的value要上升或者下降(比如亲子游的话酒吧商城这种地点的价值就应该下降,喜欢二次元的话秋叶原的价值就上升)

7.由于用MCTS进行规划很难客观评判好坏(因为每一个景点实际上都还可以玩玩的)所以在6的基础上,对树搜索设定一定限制,防止重复访问同一个子节点。

因为可能横滨中华街value最高,就一直先访问中华街的结点,而忽略了其他同样不错但评分可能略差一点的景点。
有陷入局部最优解的可能,而且规划的结果评定并不像五子棋的输赢规则那样鲜明。这是需要后续考虑的问题。

(四)基于flask构建前端,部署mcts-ai到项目上

app.py(flask.main.py)

# 导入Flask类
from flask import Flask
from flask import render_template
from flask import request# 实例化,可视为固定格式
app = Flask(__name__)# 配置路由,当前端请求/deal_request的action时执行deal_request()方法(前端可用ajax发起请求)
@app.route('/deal_request', methods = ['GET', 'POST'])
def deal_request():if request.method == "GET":# get通过request.args.get("param_name","")形式获取参数值#get_q = request.args.get("q","")#print("start ai")import syssys.path.append("../AI/")import MCTSmcts_manager = MCTS.mcts(timeLimit=10000)#开启mcts程序print("初始化中...")#from datetime import datefrom datetime import datetime#from datetime import timedeltastart_datetime = datetime(2021, 2, 1, 9, 30, 0)end_datetime = datetime(2021,2,1,20,30,0)initialstate=MCTS.State(nowspotname="横滨港未来21",travelpoint=0,totaltravelpoint=0,moneycost=0,onfoottime=0,now_datetime=start_datetime,end_datetime=end_datetime,hasbeenspots=[])print("初始化sucess")root = mcts_manager.search(initialState=initialstate)result = mcts_manager.getBestRoute(root)return str(result)#返回result到前端    elif request.method == "POST":# post通过request.form["param_name"]形式获取参数值post_q = request.form["q"]return render_template("result.html", result=post_q)if __name__ == '__main__':# app.run(host, port, debug, options)# 默认值:host=127.0.0.1, port=5000, debug=falseapp.run()
cmd 中python app.py 即可开启,访问127.0.0.1:5000

我的首页效果:

设定游玩偏好(其他设定还没code),点击运行MCTS-AI规划即可

等待15秒ai计算(因为是demo,设置个15秒够了)

通过alert()很简单地把规划结果返回给了用户

但是根据结果,为啥最后一站是山下公园,感觉还是有点不太对劲。。。要改的地方太多了。

基于蒙特卡罗树搜索的智能行程规划系统设计(二)一个简单的DEMO相关推荐

  1. 基于蒙特卡罗树搜索的智能行程规划系统设计(一)最初的启发

    引言 如今旅游越来越受到人们的欢迎,旅游规划成为了必不可少的事情.然而,对于大多数旅游新手来说,制作一份完美的旅游规划是非常困难的事情.如果寻求专业的旅游规划师的帮助,或许能获得很好的旅游行程规划,但 ...

  2. 蒙特卡罗树搜索之初学者指南

    摘要: 一直以来,学术界普遍认为在围棋游戏中机器是远不能和人类相比的,它被认为是未来十年内人工智能需要实现的目标之一.令人惊讶的是,在2016年3月由谷歌发明的Alpha Go以4-1击败了韩国的世界 ...

  3. 系统学习深度学习(四十)--基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    转自:https://www.cnblogs.com/pinard/p/10470571.html 1. 基于模拟的搜索概述 什么是基于模拟的搜索呢?当然主要是两个点:一个是模拟,一个是搜索.模拟我们 ...

  4. 强化学习基础 | (18) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    原文地址 在基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基于模型的 ...

  5. AlphaGo与蒙特卡罗树搜索

    导语 多臂赌博机问题 马尔可夫决策过程 MDPs 蒙特卡罗与马尔可夫决策过程 UniformBandit Algorithm Policy Rollout Algorithm Multi-Stage ...

  6. AlphaGo背后的搜索算法:蒙特卡罗树搜索 alphago 代码

    代码: https://github.com/Rochester-NRT/AlphaGo AlphaGo背后的搜索算法:蒙特卡罗树搜索 本文首发于微信公众号号"编程派".微信搜索& ...

  7. 蒙特卡罗树搜索(MCTS)

    蒙特卡罗树搜索(MCTS) 一种基于树结构的,在搜索空间巨大时仍有效的方法(区别于极大极小搜索和Alpha-Beta搜索) 1.思想: 将搜索树集中在更值得搜索的分枝上,如果某个着法不错,蒙特卡罗树会 ...

  8. 蒙特卡洛树搜索方法介绍——Q规划与Dyna-Q算法

    蒙特卡洛树搜索方法介绍--Q规划与Dyna-Q算法 引言 回顾:直接强化学习与间接强化学习 规划与学习的差异性 分布模型与样本模型 从算法更新图的角度认识规划与学习的差异性 随机采样单步表格式Q规划 ...

  9. 【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计

    基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计 摘要 蒙特卡洛树搜索算法 五子棋博弈的状态价值函数 附1:详细论文说明下载: 附2:实现代码下载(2022.10更新后代码): 摘要 随着人工智能 ...

最新文章

  1. TabLayout属性详解
  2. 李彦宏的文字游戏:百度10篇论文被自然语言处理顶级会议ACL 2019录用
  3. 在阿里干了五年,面试个小公司挂了…
  4. 【杂谈】2020年有三AI计算机视觉培养计划详解,该不该学怎么学CV的简单讨论...
  5. 字节流--IO学习笔记(二)
  6. python urllib发送post请求_python爬虫 urllib模块发起post请求过程解析
  7. 还有哪些类似0.99999…=1有趣的事实?
  8. 终止中台乱象 《2021年中国中台市场研究报告》隆重发布
  9. CAS自旋锁到底是什么?为什么能实现线程安全?
  10. eSIM技术必将取代SIM卡 一文读懂eSIM技术优势!
  11. C#的变迁史 - C# 4.0 之多线程篇
  12. 自动编译 打包 签名 android程序
  13. Oracle_用户管理
  14. python 拼音输入法_用Python从头开始实现一个中文拼音输入法?
  15. 100个特别的遥感应用和用途
  16. 皮尔逊Person相关系数
  17. Phyton pymssql连接数据库
  18. android 光标的绘制,Android EditText(TextView)如何绘制闪烁的光标?
  19. AWK中的OFS的问题
  20. HTML中文字间距调整

热门文章

  1. upload-labs前三关详解
  2. 数据流压缩原理实现(huffman编码,LZ77压缩算法)
  3. Windows 自动化补丁管理
  4. 第150篇 笔记-元宇宙(Metaverse)
  5. echart x轴标签偏移_坐标轴名称位置偏移的问题
  6. 大衍筮法-python实现
  7. VS2010类向导窗口太大
  8. 那些年用过的音乐软件
  9. MySQL基础学习③数据库准备工作,导入官方employees数据库
  10. MySQL 5.7数据库参数优化