基于蒙特卡罗树搜索的智能行程规划系统设计(二)一个简单的DEMO
@基于蒙特卡罗树搜索的智能行程规划系统设计
基于蒙特卡罗树搜索的智能行程规划系统设计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相关推荐
- 基于蒙特卡罗树搜索的智能行程规划系统设计(一)最初的启发
引言 如今旅游越来越受到人们的欢迎,旅游规划成为了必不可少的事情.然而,对于大多数旅游新手来说,制作一份完美的旅游规划是非常困难的事情.如果寻求专业的旅游规划师的帮助,或许能获得很好的旅游行程规划,但 ...
- 蒙特卡罗树搜索之初学者指南
摘要: 一直以来,学术界普遍认为在围棋游戏中机器是远不能和人类相比的,它被认为是未来十年内人工智能需要实现的目标之一.令人惊讶的是,在2016年3月由谷歌发明的Alpha Go以4-1击败了韩国的世界 ...
- 系统学习深度学习(四十)--基于模拟的搜索与蒙特卡罗树搜索(MCTS)
转自:https://www.cnblogs.com/pinard/p/10470571.html 1. 基于模拟的搜索概述 什么是基于模拟的搜索呢?当然主要是两个点:一个是模拟,一个是搜索.模拟我们 ...
- 强化学习基础 | (18) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)
原文地址 在基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基于模型的 ...
- AlphaGo与蒙特卡罗树搜索
导语 多臂赌博机问题 马尔可夫决策过程 MDPs 蒙特卡罗与马尔可夫决策过程 UniformBandit Algorithm Policy Rollout Algorithm Multi-Stage ...
- AlphaGo背后的搜索算法:蒙特卡罗树搜索 alphago 代码
代码: https://github.com/Rochester-NRT/AlphaGo AlphaGo背后的搜索算法:蒙特卡罗树搜索 本文首发于微信公众号号"编程派".微信搜索& ...
- 蒙特卡罗树搜索(MCTS)
蒙特卡罗树搜索(MCTS) 一种基于树结构的,在搜索空间巨大时仍有效的方法(区别于极大极小搜索和Alpha-Beta搜索) 1.思想: 将搜索树集中在更值得搜索的分枝上,如果某个着法不错,蒙特卡罗树会 ...
- 蒙特卡洛树搜索方法介绍——Q规划与Dyna-Q算法
蒙特卡洛树搜索方法介绍--Q规划与Dyna-Q算法 引言 回顾:直接强化学习与间接强化学习 规划与学习的差异性 分布模型与样本模型 从算法更新图的角度认识规划与学习的差异性 随机采样单步表格式Q规划 ...
- 【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计
基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计 摘要 蒙特卡洛树搜索算法 五子棋博弈的状态价值函数 附1:详细论文说明下载: 附2:实现代码下载(2022.10更新后代码): 摘要 随着人工智能 ...
最新文章
- TabLayout属性详解
- 李彦宏的文字游戏:百度10篇论文被自然语言处理顶级会议ACL 2019录用
- 在阿里干了五年,面试个小公司挂了…
- 【杂谈】2020年有三AI计算机视觉培养计划详解,该不该学怎么学CV的简单讨论...
- 字节流--IO学习笔记(二)
- python urllib发送post请求_python爬虫 urllib模块发起post请求过程解析
- 还有哪些类似0.99999…=1有趣的事实?
- 终止中台乱象 《2021年中国中台市场研究报告》隆重发布
- CAS自旋锁到底是什么?为什么能实现线程安全?
- eSIM技术必将取代SIM卡 一文读懂eSIM技术优势!
- C#的变迁史 - C# 4.0 之多线程篇
- 自动编译 打包 签名 android程序
- Oracle_用户管理
- python 拼音输入法_用Python从头开始实现一个中文拼音输入法?
- 100个特别的遥感应用和用途
- 皮尔逊Person相关系数
- Phyton pymssql连接数据库
- android 光标的绘制,Android EditText(TextView)如何绘制闪烁的光标?
- AWK中的OFS的问题
- HTML中文字间距调整