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 *顯示變量

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM