想必大家在工作中,经常会遇到求最优化方案的问题,在大学的学习中,有一门叫《运筹学》的课程,其中就解决了大部分的最优化方案问题,那么今天的主角就是解决运筹学的最佳工具,lingo程序,其是lindo公司的一个最重量级的产品,大家可以在:https://www.lindo.com,网址下载软件,也是很小的(50M),并且在我的博客可以下载最新的Lingo使用手册,虽然是英文的,但是大部分还是能看懂的。
总的来说,lingo的使用是很简单的,我们需要做的是将每个问题建模,然后将我们的模型输入,就可以求解了,当然Lingo用到的解决方法,都是运筹学上的最基础的知识,譬如:单纯形法、两阶段法……,使用lingo就不用考虑这些了。
不多说,上例题:(最经典的运输问题)
先给大家写出数学模型吧:
代码如下:
MODEL:
! A 3 Warehouse, 4 Customer
Transportation Problem;
SETS:
WAREHOUSE / WH1, WH2, WH3/ : CAPACITY;
CUSTOMER / C1, C2, C3, C4,C5/ : DEMAND;
ROUTES( WAREHOUSE, CUSTOMER) : COST, VOLUME;
ENDSETS
! The objective;
[OBJ] MIN = @SUM( ROUTES: COST * VOLUME);
! The demand constraints;
@FOR( CUSTOMER( J):
@SUM( WAREHOUSE( I): VOLUME( I, J)) >=
DEMAND( J));
! The supply constraints;
@FOR( WAREHOUSE( I):
@SUM( CUSTOMER( J): VOLUME( I, J)) <=
CAPACITY( I));
! Here are the parameters;
DATA:
CAPACITY = 30, 40, 10 ;
DEMAND = 10, 5, 30, 15, 20;
COST = 1.2, 1.7, 1.6, 1.8, 2.4,
1.8, 1.5, 2.2, 1.2, 1.6,
1.5, 1.4, 1.2, 1.5, 1.0;
ENDDATA
END
结果如图:
再对xij进行分析: