欢迎光临我的Blog,虽然这里还很简陋,但未来一定会焕发生机的!

Matlab与Lingo求解线性规划——炎泽汐 の Blog

数模 yanzexi 2年前 (2022-06-13) 920次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

Matlab 求解线性规划的代码模板:

在 Matlab 中,线性规划的标准型如下:
Matlab与Lingo求解线性规划——炎泽汐 の Blog
Matlab 中求解线性规划问题的函数为 linprog,其各项参数如下:
Matlab与Lingo求解线性规划——炎泽汐 の Blog
其中:

      x 为决策向量;fval 是最优解;f 为价值系数;

      A 和 b 为线性不等式约束;Aeq 和 beq 为线性等式约束;

      lb 和 ub 分别为决策向量的下界向量和上界向量;

      若求解得到的 x 是一个矩阵,需要在每条语句后面加上 zeros(m,n) 用来表示 x 的结果;


根据以上内容,列出在Matlab中的源代码模板为:

>> f = [ ;  ;  ];
>> a = [ ,  ,  ;  ,  ,  ];
>> b = [ ;  ];
>> aeq = [ , , ];
>> beq = [ ];
>> [x,fval] = linprog(f, a, b, aeq, beq, zeros( , ));
>> x, fval = -fval

Lingo 求解线性规划的代码模板:

lingo 的常用函数(lingo 每个函数都必须用@强调):

      !max, min 用于用于定义目标函数

      @bin(x)表示 x 为 0 或 1

      @gin(x)表示 x 是整数

      @free(x)表示 x 为任意实数,因为变量默认为非负实数,所以必须用这个函数解除这种限制

      @bnd(1, x, u)表示 x 为[1, u]之间的实数

      如表示 x 在(-5,5)之间的整数,@free(x),@gin(x),@bnd(-5, x, 5)


根据以上内容,列出在Lingo中的源代码模板为:

model:	!模型开始
      sets: 	!定义集合;
            row/1..n/: b;    !S 集合下标范围是 1 到 n,a b d 这三个变量用到了这个集合;
            col/1..m/: c, x;
            links(row, col): a;    !双索引的集合,a 用到了这个集合;
      endsets    !结束集合的定义;

      data:    !定义已知变量,也就是为每个已知变量赋值;
            c = 1 2 3;		!用空格进行间隔
            a = 1 2 3;
            b = 1 2 3;
      enddata    !结束数据的写入;

!目标函数
      min=@sum(col:c*x);
!约束条件
      @for(row(i):@sum(col(j):a(i,j)*x(j))<=b(i));		!其他形式可通过变形实现
喜欢 (4)
[炎泽汐de收款码]
分享 (0)

您必须 登录 才能发表评论!