MATLAB中调用CPLEX求解工具箱

发布于:2025-05-01 ⋅ 阅读:(23) ⋅ 点赞:(0)

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:n
    s = sum(x(:,j))-x(j,j);
    C = [C,   s  == 1];
end
for i = 1:n
    s = sum(x(i,:)) - x(i,i);
    C = [C, s  == 1];
end
for i = 2:n
    for j = 2:n
        if i~=j
            C = [C,u(i)-u(j) + n*x(i,j)<=n-1];
        end
    end
end
% 参数设置
ops = sdpsettings('verbose',0,'solver','cplex');
% 求解
result  = optimize(C,z);
if result.problem== 0
    value(x)
    value(z)
else
    disp('求解过程中出错');
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:  4

ans =

   NaN     0     0     1     0     0     0     0     0     0
     0   NaN     0     0     0     0     1     0     0     0
     0     1   NaN     0     0     0     0     0     0     0
     0     0     1   NaN     0     0     0     0     0     0
     0     0     0     0   NaN     1     0     0     0     0
     0     0     0     0     0   NaN     0     1     0     0
     0     0     0     0     1     0   NaN     0     0     0
     0     0     0     0     0     0     0   NaN     0     1
     1     0     0     0     0     0     0     0   NaN     0
     0     0     0     0     0     0     0     0     1   NaN

ans =

    77

截图如下:

由此证明CPLEX与MATLAB联调成功,可使用MATLAB中调用CPLEX这一强大的求解工具箱!


参考网址

  1. matlab2022+yalmip+cplex安装教程,win11 x64

  2. Cplex安装教程与使用介绍

  3. [Matlab]使用yalmip和cplex求解器求解规划问题


网站公告

今日签到

点亮在社区的每一天
去签到