MATLAB中调用CPLEX求解工具箱
1. 安装CPLEX
建议安装CPLEX12.10学术版win-x86-64,安装包及安装步骤可参见参考网址1
2. 安装yalmip
YALMIP作为MATLAB的优化求解工具包,可以统一调用gurobi、cplex等多种求解器,十分方便,工具包开源免费下载,YALMIP官网
3. 在matlab的“设置路径”中,导入yalmip的文件路径
该文件是下载yalmip所得,直接将完整文件解压后剪切到matlab的toolbox文件目录下,然后再导入文件目录即可:

4. 在matlab的“设置路径”中,导入CPLEX安装后含MATLAB的文件路径
我将CPLEX安装在了以下路径 D:\CPLEX,故导入以下文件夹及其子文件 D:\CPLEX\cplex\matlab

5. 在matlab命令窗口中输入yalmiptest命令:

可以看到CPLEX已被导入!

由上图可知,很多类型的优化问题可直接使用CPLEX的Solver进行求解!
6. 运行几个调用CPLEX的求解案例
求解经典TSP问题

% 利用yamlip\CPLEX求解TSP问题
clear;clc;close all;
d = load('tsp_dist_matrix.txt')';
n = size(d,1);
% 决策变量
x = binvar(n,n,'full');
u = sdpvar(1,n);
% 目标
z = sum(sum(d.*x));
% 约束添加
C = [];
for j = 1:ns = sum(x(:,j))-x(j,j);C = [C, s == 1];
end
for i = 1:ns = sum(x(i,:)) - x(i,i);C = [C, s == 1];
end
for i = 2:nfor j = 2:nif i~=jC = [C,u(i)-u(j) + n*x(i,j)<=n-1];endend
end
% 参数设置
ops = sdpsettings('verbose',0,'solver','cplex');
% 求解
result = optimize(C,z);
if result.problem== 0value(x)value(z)
elsedisp('求解过程中出错');
end
其中,用到了tsp_dist_matrix.txt文件,内容如下。
0 7 4 5 8 6 12 13 11 18
7 0 3 10 9 14 5 14 17 17
4 3 0 5 9 10 21 8 27 12
5 10 5 0 14 9 10 9 23 16
8 9 9 14 0 7 8 7 20 19
6 14 10 9 7 0 13 5 25 13
12 5 21 10 8 13 0 23 21 18
13 14 8 9 7 5 23 0 18 12
11 17 27 23 20 25 21 18 0 16
18 17 12 16 19 13 18 12 16 0
运行结果如下
Version identifier: 12.10.0.0 | 2019-11-26 | 843d4de2ae
CPXPARAM_MIP_Display 1
Tried aggregator 1 time.
Reduced MIP has 92 rows, 99 columns, and 396 nonzeros.
Reduced MIP has 90 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.00 sec. (0.20 ticks)
Probing time = 0.00 sec. (0.15 ticks)
Tried aggregator 1 time.
Detecting symmetries...
Reduced MIP has 92 rows, 99 columns, and 396 nonzeros.
Reduced MIP has 90 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.00 sec. (0.27 ticks)
Probing time = 0.00 sec. (0.16 ticks)
MIP emphasis: balance optimality and feasibility.
MIP search method: dynamic search.
Parallel mode: deterministic, using up to 16 threads.Node log . . .
Best integer = 7.700000e+01 Node = 0 Best node = 7.700000e+01
Clique cuts applied: 4ans =NaN 0 0 1 0 0 0 0 0 00 NaN 0 0 0 0 1 0 0 00 1 NaN 0 0 0 0 0 0 00 0 1 NaN 0 0 0 0 0 00 0 0 0 NaN 1 0 0 0 00 0 0 0 0 NaN 0 1 0 00 0 0 0 1 0 NaN 0 0 00 0 0 0 0 0 0 NaN 0 11 0 0 0 0 0 0 0 NaN 00 0 0 0 0 0 0 0 1 NaNans =77
截图如下:

由此证明CPLEX与MATLAB联调成功,可使用MATLAB中调用CPLEX这一强大的求解工具箱!
参考网址
-
matlab2022+yalmip+cplex安装教程,win11 x64
-
Cplex安装教程与使用介绍
-
[Matlab]使用yalmip和cplex求解器求解规划问题