php调用google ortools 路径规划

博客介绍了用PHP调用Python解决难题的方法。因OR - Tools只提供C++、Python、Java、.NET接口,故选择用PHP运行Python脚本。以多个包裹最短路径算法为例,根据包裹距离生成距离矩阵传入Python代码,还提及了安装教程和脚本下载。

OR-Tools用于解决车辆路径、流程、整数和线性规划以及约束编程等难题,但是只提供了提供了C++,Python,Java,.NET的接口。那么php怎么来调用呢。

我们选择使用php 运行python脚本来获取我们想要的结果

首先需要安装,可查看安装教程

本次运用的场景是多个包裹最短路径算法。假如一个快递员手上有12个包裹,如何规划一个最短送货的线路呢

根据每个包裹距离生成一个距离矩阵,注意这个距离单位是m

[
    [
        0,
        270,
        560,
        560,
        750,
        1120,
        990,
        1150,
        1200,
        1280,
        1010,
        700
    ],
    [
        270,
        0,
        350,
        400,
        490,
        920,
        820,
        1030,
        1090,
        1220,
        990,
        670
    ],
    [
        560,
        350,
        0,
        120,
        250,
        580,
        480,
        710,
        770,
        940,
        770,
        480
    ],
    [
        560,
        400,
        120,
        0,
        350,
        570,
        430,
        630,
        680,
        830,
        650,
        360
    ],
    [
        750,
        490,
        250,
        350,
        0,
        510,
        510,
        780,
        840,
        1050,
        950,
        690
    ],
    [
        1120,
        920,
        580,
        570,
        510,
        0,
        220,
        410,
        460,
        720,
        780,
        690
    ],
    [
        990,
        820,
        480,
        430,
        510,
        220,
        0,
        270,
        330,
        560,
        570,
        480
    ],
    [
        1150,
        1030,
        710,
        630,
        780,
        410,
        270,
        0,
        60,
        310,
        430,
        510
    ],
    [
        1200,
        1090,
        770,
        680,
        840,
        460,
        330,
        60,
        0,
        250,
        420,
        540
    ],
    [
        1280,
        1220,
        940,
        830,
        1050,
        720,
        560,
        310,
        250,
        0,
        320,
        580
    ],
    [
        1010,
        990,
        770,
        650,
        950,
        780,
        570,
        430,
        420,
        320,
        0,
        320
    ],
    [
        700,
        670,
        480,
        360,
        690,
        690,
        480,
        510,
        540,
        580,
        320,
        0
    ]
]

把这个距离矩阵传入我这边写好的python代码

脚本下载传送门

接下去看php如何调用

$discountMap = [[0, 270, 560, 560, 750, 1120, 990, 1150, 1200, 1280, 1010, 700], [270, 0, 350, 400, 490, 920, 820, 1030, 1090, 1220, 990, 670], [560, 350, 0, 120, 250, 580, 480, 710, 770, 940, 770, 480], [560, 400, 120, 0, 350, 570, 430, 630, 680, 830, 650, 360], [750, 490, 250, 350, 0, 510, 510, 780, 840, 1050, 950, 690], [1120, 920, 580, 570, 510, 0, 220, 410, 460, 720, 780, 690], [990, 820, 480, 430, 510, 220, 0, 270, 330, 560, 570, 480], [1150, 1030, 710, 630, 780, 410, 270, 0, 60, 310, 430, 510], [1200, 1090, 770, 680, 840, 460, 330, 60, 0, 250, 420, 540], [1280, 1220, 940, 830, 1050, 720, 560, 310, 250, 0, 320, 580], [1010, 990, 770, 650, 950, 780, 570, 430, 420, 320, 0, 320], [700, 670, 480, 360, 690, 690, 480, 510, 540, 580, 320, 0]];

$discountMap = json_encode($discountMap);

$command = "python3 google_ortools.py {$discountMap}";

//执行脚本以后。$res就是每个点排序后的结果了。只需要按顺序链接各点就可以是规划后的线路了
exec($command, $res);

//返回结果
['0', '11', '10', '9', '8', '7', '6', '5', '4', '2', '3', '1']

 这个各个点在地图上的效果图

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值