调用CPLEX求解优化问题的简化方法

上传人:re****.1 文档编号:510627429 上传时间:2023-12-02 格式:DOC 页数:3 大小:20.50KB
返回 下载 相关 举报
调用CPLEX求解优化问题的简化方法_第1页
第1页 / 共3页
调用CPLEX求解优化问题的简化方法_第2页
第2页 / 共3页
调用CPLEX求解优化问题的简化方法_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《调用CPLEX求解优化问题的简化方法》由会员分享,可在线阅读,更多相关《调用CPLEX求解优化问题的简化方法(3页珍藏版)》请在金锄头文库上搜索。

1、(个人总结的ILOG-CPLEX最简约的建模和使用方法,非常实用)数学规划模型可描述极为复杂的实际问题。利用优化算法,应用程序能迅速找到这些问题模型的解决方案。ILOGCPLEX的速度非常快,可以解决现实世界中许多大规模的问题,并利用现在的应用系统快速提交可靠的解决方案。这一特点可以从它在全球各地的使用情况和能在极端苛刻条件下应用的现状得到完全证明。它能够处理有数百万个约束(constraint)和变量,而且一直刷新数学规划的最高性能记录。ILOGCPLEX接受的优化问题的一般形式:其中x中的决策变量可指定为连续类型(NumVarType.Float)或离散(整数)类型(NumVarType.

2、Int);下界lb最小至零(即决策变量非负),上届最大至C#可处理的最大值(System.Double.MaxValue)。这里规定所有不等式约束的方向为“”。调用CPLEX求解前需要给出:doublec优化函数向量,数组长度为决策变量个数;这里要看看c能否为数组的数组,添加目标函数时能否按照数组的数组添加;doublevar其行数为决策变量的组数,其列数应为决策变量的个数;doubleA_le不等式约束矩阵,其列数应为决策变量的个数;doubleb_le不等式约束界,数组长度与A_le的行数保持一致;doubleA_eq等式约束矩阵,其列数应为决策变量的个数;doubleb_eq等式约束界,

3、数组长度与A_eq的行数保持一致;doublelb决策变量的下界,数组长度与决策变量个数保持一致,若某个xi无下界则置为0;doubleub决策变量的上界,数组长度与决策变量个数保持一致,若某个xi无上界则置为System.Double.MaxValue;doubleXt决策变量类型,数组长度与决策变量个数保持一致;xti=NumVarType.Float表示连续变量,Xti=NumVarType.Int表示整数变量;若混合整数规划问题退化为线性规划问题(即所有Xti=NumVarType.Int)则可省略Xt;【注】为调用ILOGCPLEX,项目中需要添加引用指定路径下的ILOG.CONCE

4、RT.DLL及ILOG.CPLEX.DLL,同时为调用求解器本身,需要加载CPLEX.DL(可置于程序所在目录);此外需要使用命名空间ILOG.CONCERT及ILOG.CPLEX。以下假定已经为以上提到的所有数组均赋值,且数据一致性良好。需要说明的是若无不等式约束/等式约束,则勿将对应数组赋空(null);以等式约束不存在为例,请赋为:doubleA_eq=;doubleb_eq=;若某变量xi无下界(程序限制非负),则lbi=0.0;若xi无上界,则ubi=System.Double.MaxValue;C#调用ILOGCPLEX求解的简化方法:Cplexcplex=newCplex();/

5、建立问题模型INumVarvar=newINumVarl;/用于求解后调用或查看结果IRangerng=newIRangel;/用于求解后调用或查看松弛程度intn=lb.Length;/变量个数,亦可赋值为c.Length或ub.LengthINumVarx=cplex.NumVarArray(n,lb,ub,xt);/添加决策变量/若退化为纯线性规划则可省略xt,改写为/INumVarx=cplex.NumVarArray(n,lb,ub);var0=x;/加引用(指针变化),两个可以等同cplex.AddMaximize(cplex.ScalProd(x,c)/添加优化目标/若需要最小化

6、目标则改为AddMinimize/下面将定义约束rng0=newIRangeA_le.Length+A_eq.Length;/尝试添加约束的一种方法for(intj=0;jA_le.Length;j+)/不等式约束rng0j=cplex.AddLe(cplex.ScalProd(x,A_lej),b_lej);for(intj=0;jA_eq.Length;j+)/等式约束rng0j+A_le.Length=cplex.AddEq(cplex.ScalProd(x,A_eqj),b_eqj);if(cplex.Solve()/以下列出求解成功后常用的成员doubleresult=cplex.GetValues(varO);/得到决策变量值System.Console.WriteLine(Solutionstatus=+cplex.GetStatus();/求解状态System.Console.WriteLine(Solutionvalue=+cplex.ObjValue);/目标最优值for(intj=0;jresult.Length;j+)System.Console.WriteLine(result+j+=+resultj);cplex.End();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号