本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

C#调用Cplex入门基础总结

1 创建模型实例

Cplex myCplexSolver = new Cplex();

这一步相当与创建了一个Cplex的一个对象,后面将使用这个对象进行变量定义、目标函数、约束及决策变量的界

2 创建目标函数

注释:

Cplex.Prod(INumExpr[], double[]);第一个参数是决策变量数组,第二个参数是决策变量的系数数组

3 变量的定义

4 添加约束

添加约束的方法按照行的形式和按照列的形式;

  1. 按照行的形式使用函数如下
  1. 按列方式添加约束

image.png

5 模型求解与输出

6 LP、MPS模型文件解释与Cplex导入模型求解


为了实现不同求解器之间的模型通用,我们可以将Cplex的模型导入到Gurobi等求解器去求解,常用的是lp格式和MPS格式。

这节讲述两种文件的定义和一个读入外部模型的示例程序


6.1 LP文件的解释

20200209133752555.png

LP文件非常清晰明了,但貌似规划软件对 mps 文件支持的更好。其中需要注意的是


6.2 MPS文件解释

上面问题的 MPS 文件内容为:


20200209133611734.png

下面详细解释这个 MPS 文件:


NAME: 表示这个优化模型的名字,后面可以不写内容


ROWS: 每一行,包括目标函数与约束条件


(1) N 表示自由行, obj是对目标函数的命名,可以任意取


(2) L 表示该行小于等于, c1是对改行的命名,可以任意取名


(3) G 表示该行大于等于


(4) E 表示该行等于


COLUMNS: 每一列,及对应的系数

(1) 下面的第一列要空

(2) 下面的第二列表示列的名字,其实就是求解变量

(3) 下面的第三列表示所在行的名字

(4) 下面的第四列表示所在行与列对应的系数

(5) 其中 MARK0000 ‘MARKER’ ‘INTORG’ , MARK0001 ‘MARKER’ ‘INTEND’ 分别表示整数变量的起止

(6) 第五列、第六列分别与第三列、第四列的含义相同。


RHS: 约束条件最右端的数字

(1) 下面的第一列要空

(2) 下面的第二列表示 rhs 名字,可以任取

(3) 下面的第三列表示所在行的名字

(4) 下面的第四列表示所在行对应的 RHS 值

(5) 第五列、第六列分别与第三列、第四列的含义相同。


Bounds: 表示各变量的上界或下界

(1) LO 表示下界

(2) UP 表示上界

(3) FX 表示该变量固定值

(4) FR 表示改变量的范围为 (−∞,∞)(-\infty,\infty)(−∞,∞)

(5) MI 表示下界为负无穷

(6) PL 表示上界为正无穷

MPS 变量默认的范围为 [0,∞)[0,\infty)[0,∞)


ENDDATA: 表示 MPS 文件结束


6.3 导入模型的代码