【问题标题】:Product of binary and integer constraint - Linear Programming二进制和整数约束的乘积 - 线性规划
【发布时间】:2021-11-06 16:37:33
【问题描述】:

我正在尝试制定一个线性计划,该计划将分配不同数量的员工在不同的日子开始工作。从一天开始的每组员工将在一周内休假两天。但是,时间表未知。例如,从星期一开始的员工可以在一周中的任何两天休假。由于从第 (i) 天开始的人数是未知的,而且他们是否会休假也是未知的,所以我将得到两个决策变量的乘积 - 一个是整数 xi(从第 i 天开始的员工)和一个二进制变量 yij(从第 i 天开始的员工是否在第 j 天休息)。

我已经完成了公式化,这里是:

决策变量 1:xi(从第 i 天开始的员工) 决策变量 2:yij(如果从第 i 天开始的员工在第 j 天工作,则为 1,如果从第 i 天开始的员工在第 j 天休息,则为 0)

目标函数: 最小化员工总数 - sum (i in 1..7) xi

受制于: xi*yij >= requiredj(第j天的可用工人数必须满足第j天的需求)

我正在尝试在 CPLEX 上编写代码,但我不知道如何使 xi*yij 线性化并编写代码....谁能帮帮我?

谢谢。

【问题讨论】:

    标签: optimization cplex linearization


    【解决方案1】:

    How to with OPLHow to multiply a decision variable by a boolean decision variable in CPLEX?

    // suppose we want b * x <= 7 
    
    dvar int x in 2..10;
    dvar boolean b;
    
    dvar int bx;
    
    maximize x;
    subject to
    {
      
    // Linearization  
    bx<=7;
    
     
    
    2*b<=bx;
    bx<=10*b;
    
    bx<=x-2*(1-b);
    bx>=x-10*(1-b);
    
    // if we use CP we could write directly
    // b*x<=7
    
    // or rely on logical constraints within CPLEX
    // (b==1) => (bx==x);
    // (b==0) => (bx==0);
    }
    

    【讨论】:

    • 非常感谢您的帮助!但是我想在 CPLEX 上写这个,我不确定我做错了什么,你能帮我弄清楚吗?我是这个软件和整个概念的新手你能告诉我如何用矩阵在 cplex 上编写代码吗?
    • 当您说您需要帮助编写代码时,您尝试使用什么语言和 API?你都尝试了些什么?只是要指出,通常更容易用现实世界的术语来思考真正的问题,并将你的变量和约束与现实世界的实体联系起来。试图用矩阵来思考和工作通常是没有帮助的。在 CPLEX 内部存在矩阵和类似结构,但我们不需要从这些方面进行思考。建模语言和工具让事情变得更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多