Cplex的安装和使用实例

最近有文章复现需要用到Cplex,所以捣鼓了一下,看其他博客感觉不解渴,所以索性在这里记录一些key point

1)下载与安装:Cplex的下载可以在官方网站下载,学生是免费下载使用的,非学生可以在网上找一找,有可用的网盘下载方案;

安装过程比较简单,个人是把应用程序安装好之后再在matlab中添加的路径,参考链接:https://blog.csdn.net/robert_chen1988/article/details/44464369

使用的过程中最好把Yalmip也安装好,因为有一些必要的函数在Cplex里面没有。

做整数规划的过程中,需要让Yalmip能识别到Cplex,使用yalmiptest可以看到Cplex是否被yalmip看到,如果没有,则需要根据自身安装的Cplex版本号对yalmip目录下的solvers/definesolvers.m文件做更改,将里面的某一个版本号改为你的版本号,例如将12.8.0都改为12.9.0,对应的cplexlink1280也全改为cplexlink1290。这样保证两个套件相互都能引用。

2)功能测试:

参考链接:https://www.cnblogs.com/trux/p/7701230.html

根据上述链接里的例子运行了一下,例子稍微看一下,不用特别较真,运行没有问题即可开始写自己的程序。

上述例子运行过程基本都采用了cplex的solver来解,yalmip建模问题下面总结一下,与cplex可以做一个对比。

通常来说,yalmip中一个线性规划的写法包含三个部分:

定义变量:intvar (整型),spdvar(实型),binvar(0/1型)等,例如:x=intvar(3,1);

定义目标函数和限制条件:为f赋值,例如:f=-[1,2,3],g=f*x为目标函数(x1+2*x2+3*x3),F=set(限定条件)+set(限定条件)+...+set(限定条件);

设置Cplex为求解工具求解:sdpsettings('verbose','1','solver','cplex'); optimize(F,-f,ops);double(f);double(x);

3)解决问题:

由于Cplex是IBM搞的一个比较成熟的软件,相关的类写得已经很丰富了,建立对象后按照相应的方法格式去写就行了。所以Cplex写问题与前面描述的yalmip的写法有一些区别:Cplex的方法可以参考IBM的类描述https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.cplex.help/refmatlabcplex/html/classCplex.html

问题:

Maximize     x1 + 2x2 + 3x3 + x4

Subject to

                   -x1 + x2 + x3 +10x4<=20

                    x1 - 3x2+ x3            <=30

                             x2         - 3x4   =  0

Bounds

                      0<=x1<=40, x2>=0, x3>=0, 2<=x4<=3, 且x4为整数

程序:

%% 初始化Cplex对象
cplex = Cplex('mipex1');
cplex.Model.sense = 'maximize';

%% 问题描述
cplex.addCols([1; 2; 3; 1], [], [0; 0; 0; 2], [40; inf; inf; 3],'CCCI');
cplex.addRows(-inf, [-1  1 1   10], 20);
cplex.addRows(-inf, [ 1 -3 1    0], 30);
cplex.addRows(   0, [ 0  1 0 -3.5],  0);

%% 问题求解
cplex.solve();

%% 写出结果
fprintf ('\nSolution status = %s \n', cplex.Solution.statusstring);
fprintf ('Solution value = %f \n', cplex.Solution.objval);
disp ('Values =');
disp (cplex.Solution.x);
disp ('Slacks =');
disp (cplex.Model.rhs - cplex.Solution.ax);

cplex下的方法可以参考上述链接,addcols方法中给出了目的函数、上下限以及变量的类型,解的结果如下:

Slacks表示的是将求得的x代入到原限制条件中,求得的值与条件中右侧值之间的差。

  • 31
    点赞
  • 215
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
一个项目实例使用MATLABCPLEX优化算法来解决运输问题。假设有一个公司需要将产品从多个仓库运输到多个销售点,我们需要决定如何分配产品以最小化总运输成本。 首先,我们需要收集数据,包括仓库的位置、销售点的位置、产品的数量和运输成本。使用MATLAB可以方便地处理和处理这些数据。 接下来,我们可以使用MATLAB的优化工具箱来建立一个数学模型,将问题表示为一个数学规划问题。我们可以定义变量,例如决策变量表示每个仓库向每个销售点运输的产品数量。我们还可以制定约束条件,如每个仓库的容量限制和每个销售点的需求限制。最后,我们可以定义目标函数,即最小化总运输成本。 然后,我们可以将问题传递给CPLEX求解器,这是一个优化软件包,用于解决线性规划、混合整数线性规划等问题。CPLEX使用优化算法来找到问题的最优解。我们可以在MATLAB调用CPLEX,并指定适当的求解方法和停止准则。 一旦求解器找到了最优解,我们可以通过MATLAB对结果进行分析和可视化。我们可以绘制地图,显示最优路径和运输量。我们还可以计算总运输成本,以评估我们的解决方案的效果。 总之,使用MATLABCPLEX可以解决各种优化问题。在这个项目实例,我们使用这两个工具来解决运输问题,找到了最优的产品分配方案以最小化总运输成本。这个例子展示了MATLABCPLEX在项目实践的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值