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 * 显示变量
来源: http://www.bubuko.com/infodetail-3285330.html