• 疫情物资储藏库建设规划问题,使用matlab+cplex+yalmib求解


    疫情物资储藏库建设规划问题,使用matlab+cplex+yalmib求解

    一、Cplex安装及配置

    一、安装Cplex
    Cplex 是一款商业化的规划问题求解器,支持python和matlab等常用语言,功能非常强大。可以根据需求在官网上下载到对应的版本。community-edition可以免费试用,但最多只能计算1000个变量或1000个约束条件的优化问题。
    点击此处进入IMB官网进行下载:Cplex官方下载地址
    二、将安装好的Cplex添加到路径
    安装好之后,打开Cplex文件夹(根据你安装的位置而定),里面有一个matlab文件夹,打开matlab之和,通过添加路径的方法将“…\cplex\matlab”文件夹和其中包含的子文件夹都添加到matlab的路径之中。
    在这里插入图片描述
    ![](https://img-blog.csdnimg.cn/ae260be37ec74b48a9ffa59d4edfe6d4.jpe
    三、验证是否配置成功
    方法1:在命令行输入:doc cplex
    如果安装成功会显示Cplex的帮助文档。
    但是请注意: 做到这一步只能说明matlab配置好了Cplex求解器,但是不能保证matlab+yalmib+cplex能够运行。因为三者各版本的兼容性不一样,比如说编者用的Matlab2019a,只能兼容Cplex12.8和与其对应的yalmib版本。换成其他版本虽然安装成功,但是后续可能无法使用。
    在这里插入图片描述
    方法二、安装好yamlib后,通过test来查看已经安装的求解器
    详细过程见 yamlib的安装

    二、yalmib安装及配置

    yalmib的安装过程和Cplex类似:
    一、下载安装:点击进入yalmib官网下载地址
    二、将安装好的文件放入matlab安装路径下的toolbox文件夹。
    三、将按照好的文件添加到matlab路径
    四、使用test进行测试
    在这里插入图片描述
    根据这个结果,可以查看yalmib能够调用的求解器,显示了CPLEX-IBM,说明matlab+cplex+yalmib的环境已经配置好。

    三、案例分析

    目标函数:成本最小+时间最短

    minZ_1=∑_(i∈I)▒〖f_i X〗i +∑(i∈I)▒〖〖∑_(k∈K)▒h_i^k S〗i^k X_i 〗+ω∑(i∈I)▒∑_(j∈J)▒∑_(k∈K)▒〖C_j^k q〗_ij^k 〖(d〗_ij/v_ij-T)

    约束条件:

    0≤S_ik≤D_ik,∀i∈I,∀k∈K (3-2)
    式(3-2)表示储备库 中第 类物资的存储量不超过其最大存储能力。
    ∑_(j∈J)▒〖〖C_j^k q〗ijk≤S_ik,∀i∈I〗,∀k∈K (3-3)
    式(3-3)表示从储备库 送往所有需求点的第 类物资数量不超过其最大储存能力。
    (i∈I)▒〖q_ij^k=1,∀j∈J,∀k∈K〗 (3-4)
    式(3-4)表示所有应急医疗物资储备库向应急物资需求点 提供第 类物资数量之和等于 点第 类物资需求数。
    0≤q_ij^k≤1,∀i∈I,∀j∈J,∀k∈K (3-5)
    式(3-5)表示应急医疗物资储备库 向应急物资需求点 提供第 类物资的数量不大于 点第 类的物资需求数。
    0≤q_ij^k≤X_i,∀i∈I,∀j∈J,∀k∈K (3-6)
    式(3-6)表示仅当应急储备库 被选址时,应急储备库才能提供应急物资。
    ∑_(i=1)^m▒〖X_i≤P〗 (3-7)
    式(3-7)表示所选中的储备库 总数不大于上限P个。
    X_i∈{0,1},∀i∈I (3-8)
    式(3-8)表示X_i为 整数决策变量。

    代码实现(全部代码请私聊):

    clc
    close all
    clear all
    warning off
    %% 读取原始数据
    %% 数据路径
    filepath='data.xlsx';
    %% 读取数据保存到结构体data中
    [need_data,need_txt]=xlsread(filepath,'受灾区域物资需求量');
    %step2 参数设置
    % load data.mat
    supplies=[supply.capacity];
    demands=[demand.constant];
    f=[supply.cost];
    %% 变量定义
    x = binvar(Supply_num_all, 1);%
    y = sdpvar(Demand_num, Supply_num_all);
    %% 添加约束条件
    F = [x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+...
        x(7)+x(8)+x(9)+x(10)<=P,...
        y(1,1)+y(1,2)+y(1,3)+y(1,4)+y(1,5)+y(1,6)+...
        y(1,7)+y(1,8)+y(1,9)+y(1,10)==demands(1),
        .
        .
        .
        .................................等式约束.................................
        y(1,1)+ y(2,1)+y(3,1)+y(4,1)+y(5,1)+y(6,1)+...
        y(7,1)+y(8,1)+y(9,1)+y(10,1)+y(11,1)<=x(1)*supplies(1),...
       .
       .
       .
       .................................不等式约束................................. ];
    % %设置不确定集合,此示例为box类型
    % % W = [0<=w(1)<=40,0<=w(2)<=40,0<=w(3)<=40,uncertain(w)];
    %  W = [-20<=w<=20,uncertain(w)]; %uncertain(w)指明不确定性
    options = sdpsettings('solver','cplex');   %设置求解器为cplex
    u=0.5;
    f1=sum(x.*f');
    f2=hik*sum(sum(y));
    T_thre=get_T_thre(dist,Vij,T);
    f3=u*w*sum(sum(T_thre.*y));
    f4=(1-u)*cijk*sum(sum(dist.*y));
    objective =sum(f1+f2+f3+f4); %目标函数 最小化优化变量累加和
    sol=optimize(F,objective,options); %优化求解
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    结果展示

    CPXPARAM_MIP_Display 1
    Tried aggregator 1 time.
    MIP Presolve eliminated 110 rows and 0 columns.
    Reduced MIP has 22 rows, 120 columns, and 240 nonzeros.
    Reduced MIP has 10 binaries, 0 generals, 0 SOSs, and 0 indicators.
    Presolve time = 0.02 sec. (0.13 ticks)
    Probing time = 0.00 sec. (0.01 ticks)
    Tried aggregator 1 time.
    Reduced MIP has 22 rows, 120 columns, and 240 nonzeros.
    Reduced MIP has 10 binaries, 0 generals, 0 SOSs, and 0 indicators.
    Presolve time = 0.00 sec. (0.11 ticks)
    Probing time = 0.00 sec. (0.01 ticks)
    MIP emphasis: balance optimality and feasibility.
    MIP search method: dynamic search.
    Parallel mode: deterministic, using up to 8 threads.
    Node log . . .
    Best integer = 1.159707e+04 Node = 0 Best node = 0.000000e+00
    Best integer = 4.498184e+03 Node = 0 Best node = 0.000000e+00
    Best integer = 3.384569e+03 Node = 0 Best node = 3.138971e+03
    Best integer = 3.202350e+03 Node = 0 Best node = 3.202350e+03
    Implied bound cuts applied: 16
    Mixed integer rounding cuts applied: 2
    Gomory fractional cuts applied: 3

    在这里插入图片描述
    有错误之处还请批评指正。
    有朋友反映说下载不了Cplex和yalmib;
    这里提供一个适配matlab2019以后的Cplex+yalmib版本

  • 相关阅读:
    jpa框架部分重点
    菜鸟、顺丰、京东物流:无“智”难行?
    三体目标管理笔记
    [Python进阶] Pyinstaller打包程序时为程序添加图标
    Java之SPI
    Mybatis中的#{}和${}的区别
    一文讲解:如何在多步操作中集成式进行数据导入工作
    052_末晨曦Vue技术_处理边界情况之程序化的事件侦听器
    字节码进阶之javassist字节码操作类库详解
    linux系统下操作I2C总线外设(imx6ull的oled显示屏i2c驱动笔记)
  • 原文地址:https://blog.csdn.net/u013367499/article/details/128031179