Leapms + cplex解决 混合整数规划问题
Leapms + cplex解决 混合整数规划问题
O、概述
CPleX是一个神秘的求解器, 听说久了就想用, 但是直接用有些困难, 尤其入门困难. 对初学者来说Leapms是一个好的通道.
在Leapms内有一个cplex命令, 直接敲入cplex+回车就可以调用Cplex求解. 然而网上下载的Leapms没有这个功能.
但是这难不倒本尊, 因为leapms可以输出 lp 和 ms 文件, 这可是通用模型接口啊. 通过这个就行了呗.
什么?那里找Leapms? 百度呗。。。。。
一、让Leapms输出MPS文件
1、首先从别处复制一个求解旅行商问题问题的leapms模型, 用记事本存成TSP.leap文件(点下面的view code打开代码).
什么?这个模型怎么理解?看本博客其他文(https://www.cnblogs.com/leapms/p/10058798.html)
//The Traveling Salesman Problem min sum{i=1,...,n;j=1,...,n;i<>j}x[i][j]D[i][j] subject to sum{i=1,...,n;i<>j}x[i][j]=1 | j=2,...,n sum{j=1,...,n;i<>j}x[i][j]=1 | i=2,...,n u[1]=0 u[j]>=u[i]+1-n(1-x[i][j])|i=1,...,n;j=2,...,n;i<>j u[i]<=n-1|i=1,...,n where n is an integer Cd is a set D[i][j] is a number|i=1,...,n;j=1,...,n x[i][j] is a variable of binary|i=1,...,n;j=1,...,n;i<>j u[i] is a variable of nonnegative number|i=1,...,n data_relation n=_$(Cd)/2 D[i][j]=sqrt((Cd[2i-1]-Cd[2j-1])^2+(Cd[2i]-Cd[2j])^2) --> |i=1,...,n;j=1,...,n data //52个城市的坐标 Cd={ 575 25 185 345 750 945 685 845 655 880 660 25 230 525 1000 580 1175 650 1130 1605 620 1220 580 1465 200 1530 5 845 680 725 370 145 665 415 635 510 875 560 365 300 465 520 585 480 415 835 625 975 580 1215 245 1320 315 1250 400 660 180 410 250 420 555 575 665 1150 1160 700 580 685 595 685 610 770 610 795 645 720 635 760 650 475 960 95 260 875 920 700 500 555 815 830 485 1170 65 830 610 605 625 595 360 1340 725 1740 245 }
2、假设模型保存在D盘的\TSP目录里, 路径名: D:\TSP.
3、运行leapms软件.
输入命令shp, 改变工作路径.
系统提示输入路径名, 输入D\TSP
4、在leampms里输入命令load调入模型.TSP.leap (见下图,红线处是需要输入的地方)
5、输入命令savemps
这时模型就已经被存为mps格式了。在D:\TSP目录下应该能看到一个叫TSP.mps的文件。
上面显示模型有2704个变量,2756个约束。
二、启动CPLEX求解
6、假设你的机器已经安装了cplex,这时打开一个DOS窗口,并把工作目录设成D:\TSP, 而后用cplex命令启动cplex, 就进入到cplex交互环境下了。
什么?那里找CPLEX正版安装包? 必应国际呗。。。。。
什么?如何打开Dos窗口?问问度娘。。。
7、在CPLEX环境下输入read命令,输入tsp.msp文件名, 然后输入optimize启动cplex求解。
8、CPLEX开始求解,求解完毕后。使用display 命令得到目标函数最优值。
9、使用display solution variables *显示变量