Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

用Leapms建摸 / 用 CPLEX 求解 旅行商问题

基础运筹学 2019-11-12 17:59:00 阅读数:30 评论数:0 点赞数:0 收藏数:0

用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=,...,n;j=,...,n;i<>j}x[i][j]D[i][j]

subject to
    sum{i=,...,n;i<>j}x[i][j]= | j=,...,n
    sum{j=,...,n;i<>j}x[i][j]= | i=,...,n
    
    u[]=
    u[j]>=u[i]+-n(-x[i][j])|i=,...,n;j=,...,n;i<>j
    u[i]<=n-|i=,...,n

where
    n is an integer
    Cd is a set
    D[i][j] is a number|i=,...,n;j=,...,n
    x[i][j] is a variable of binary|i=,...,n;j=,...,n;i<>j
    u[i] is a variable of nonnegative number|i=,...,n

data_relation
    n=_$(Cd)/
    D[i][j]=sqrt((Cd[2i-]-Cd[2j-])^+(Cd[2i]-Cd[2j])^) -->
        |i=,...,n;j=,...,n
data
    //52个城市的坐标
    Cd={
                                                                                                        }
View Code

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 *显示变量

 

 

 

版权声明
本文为[基础运筹学]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/leapms/p/11843946.html