求解优化问题的简化方法》
在线阅读本文:http://3y.uu456.com/bp_3cr5r4v6ye4uc568dm0k_1.html
调用 CPLEX 求解优化问题的简化方法
(个人总结的 ILOG-CPLEX 最简约的建模和使用方法,非常实用) 数学规划模型可描述极为复
杂的实际问题。利用优化算法,应用程序能迅速找到这些问题模型的解决方案。 ILOG CPLEX 的
速度非常快,可以解决现实世界中许多大规模的问题,并利用现在的应用系统快速提交可靠的解
决方案。这一特点可以从它在全球各地的使用情况和能在极端苛刻条件下应用的现状得到完全证
明。它能够处理有数百万个约束 (constraint) 和变量,而且一直刷新数学规划的最高性能记录。
ILOG CPLEX 接受的优化问题的一般形式:
其中 x 中的决策变量可指定为连续类型(NumVarType.Float)或离散(整数)类型
(NumVarType.Int);下界 lb 最小至零(即决策变量非负),上界最大至 C#可处理的最大值
(System.Double.MaxValue)。这里规定所有不等式约束的方向为“错误!未找到引用源。”。
调用 CPLEX 求解前需要给出: double[] c ——优化函数向量,数组长度为决策变量个数;这里要
看看 c 能否为数组的数组,添加目标函数时能否按照数组的数组添加;
double[][]var ——其行数为决策变量的组数,其列数应为决策变量的个数; double[][] A_le ——
不等式约束矩阵,其列数应为决策变量的个数; double[] b_le —— 不等式约束界,数组长度与
A_le 的行数保持一致; double[][] A_eq —— 等式约束矩阵,其列数应为决策变量的个数;
double[] b_eq ——等式约束界,数组长度与 A_eq 的行数保持一致;
double[] lb ——决策变量的下界,数组长度与决策变量个数保持一致,若某个 x[i]无下界则置为
0;
double[] ub ——决策变量的上界,数组长度与决策变量个数保持一致,若某个 x[i]无上界则置为
System.Double.MaxValue;
double[] xt ——决策变量类型,数组长度与决策变量个数保持一致;xt[i] = NumVarType.Float 表示
连续变量,xt[i] = NumVarType.Int 表示整数变量;若混合整数规划问题退化为线性规划问题(即
所有 xt[i] = NumVarType.Int)则可省略 xt;
【注】为调用 ILOG CPLEX,项目中需要添加引用——指定路径下的 ILOG.CONCERT.DLL 及
ILOG.CPLEX.DLL,同时为调用求解器本身,需要加载 CPLEX.DL L(可置于程序所在目录);
此外需要使用命名空间 ILOG.CONCERT 及 ILOG.CPLEX。以下假定已经为以上提到的所有数组
均赋值,且数据一致性良好。需要说明的是若无不等式约束/等式约束,则勿将对应数组赋空
(null);以等式约束不存在为例,请赋为: double[][] A_eq = { }; double[] b_eq = { };
若某变量 x[i]无下界(程序限制非负),则 lb[i] = 0.0;若 x[i]无上界,则 ub[i] =
System.Double.MaxValue;
C#调用 ILOG CPLEX 求解的简化方法:
评论3