线性规划一

LINGO 线性规划

以例1.2为例

max ⁡ z = 2 x 1 + 3 x 2 − 5 x 3 , s . t . x 1 + x 2 + x 3 = 7 , 2 x 1 − 5 x 2 + x 3 ≥ 10 , x 1 + 3 x 2 + x 3 ≤ 12. x 1 , x 2 , x 3 ≥ 0. \max z = 2x_1+3x_2-5x_3, \\ s.t.\\ x_1+x_2+x_3=7,\\ 2x_1-5x_2+x_3\ge10,\\ x_1+3x_2+x_3\le12.\\ x_1,x_2,x_3\ge0. maxz=2x1+3x25x3,s.t.x1+x2+x3=7,2x15x2+x310,x1+3x2+x312.x1,x2,x30.

不使用集合的方法

直接把上面的式子输进去,需要注意LINGO中不需要写变量 z,并且LINGO 中变量默认是非负的,如果要求变量的取值范围为实数,可以加上 @free(x)

max = 2 * x1 + 3 * x2 - 5 * x3;

    x1 +     x2 + x3  = 7;
2 * x1 - 5 * x2 + x3 >= 10;
    x1 + 3 * x2 + x3 <= 12;

使用集合的方法

要使用集合的方法,我们首先要确定LINGO模型有哪些集合。LINGO模型的集合会对应于数学模型中的矩阵或向量,因此我们首先要把上式化为标准型的矩阵形式。

max ⁡ z = c T x s . t . A x ≤ b A e q x = b e q b l ≤ x ≤ b u \max z = \bold c^T \bold x\\ s.t. \\ \bold A \bold x \le \bold b\\ \bold A_{eq} \bold x = \bold b_{eq}\\ \bold b_l \le \bold x \le \bold b_u maxz=cTxs.t.AxbAeqx=beqblxbu

c = [ 2 3 5 ] , x = [ x 1 x 2 x 3 ] , \bold c = \begin{bmatrix} 2 \\ 3 \\ 5 \\ \end{bmatrix}, \bold x = \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ \end{bmatrix},\\ c=235,x=x1x2x3,
A = [ − 2 5 − 1 1 3 1 ] , b = [ − 10 12 ] , \bold A = \begin{bmatrix} -2&5&-1 \\ 1&3&1 \\ \end{bmatrix}, \bold b = \begin{bmatrix} -10 \\ 12 \\ \end{bmatrix}, A=[215311],b=[1012],
A e q = [ 1 1 1 ] , b e q = [ 7 ] , \bold A_{eq} = \begin{bmatrix} 1&1&1 \\ \end{bmatrix}, \bold b_{eq} = \begin{bmatrix} 7 \\ \end{bmatrix}, Aeq=[111],beq=[7],
b l = [ 0 0 0 ] , b u = [ + ∞ + ∞ + ∞ ] , \bold b_{l} = \begin{bmatrix} 0 \\ 0\\ 0\\ \end{bmatrix}, \bold b_{u} = \begin{bmatrix} +\infty \\ +\infty\\ +\infty\\ \end{bmatrix}, bl=000,bu=+++,

SETS:
    col    /1..3/  : c   , x; !column number of matrix, number of variables   ;
    row    /1..2/  : b      ; !row number of A        , number of <= equations;
    row_eq /1..1/  : b_eq   ; !row number of A_eq     , number of  = equations;
    le(row   , col): A      ; !to define A   ;
    eq(row_eq, col): A_eq   ; !to define A_eq;
ENDSETS

DATA:
    c    =  2   3  -5 ;
    b    = -10  12    ;
    b_eq =  7         ;
    A    = -2   5  -1 
            1   3   1 ;
    A_eq =  1   1   1 ;
ENDDATA

MAX = @SUM(col: c * x);
@FOR(row   (i): @SUM(col(j): A   (i,j) * x(j)) <= b   (i));
@FOR(row_eq(i): @SUM(col(j): A_eq(i,j) * x(j))  = b_eq(i));

读取文件的方法

要读取文件,只需要将数据段改为

DATA:
    c    = @FILE(Ldata.txt);
    b    = @FILE(Ldata.txt);
    b_eq = @FILE(Ldata.txt);
    A    = @FILE(Ldata.txt);
    A_eq = @FILE(Ldata.txt);
ENDDATA

Ldata.txt的内容为

2 3 -5 ~
-10 12 ~
7 ~
-2 5 -1
1 3 1~
1 1 1~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值