Excel 无法理解如何向opensolver或Minizing表达真实世界的问题以进行工作人员分配

Excel 无法理解如何向opensolver或Minizing表达真实世界的问题以进行工作人员分配,excel,solver,knapsack-problem,constraint-programming,minizinc,Excel,Solver,Knapsack Problem,Constraint Programming,Minizinc,首先,我不太精通Minizing或constraint编程,我在youtube上观看了excel“solver”教程,我可以理解,但我不知道如何将我的问题转化为excel可解算的解决方案,也不知道Minizing 为了解释这个问题,我有一个我认为是多层次背包问题,但可能是错误的。 以下是我认为的限制条件 There are 25 "admin" who supervise over 200 "staff". Each admin has a unique

首先,我不太精通Minizing或constraint编程,我在youtube上观看了excel“solver”教程,我可以理解,但我不知道如何将我的问题转化为excel可解算的解决方案,也不知道Minizing

为了解释这个问题,我有一个我认为是多层次背包问题,但可能是错误的。 以下是我认为的限制条件

There are 25 "admin" who supervise over 200 "staff".
Each admin has a unique workload allocation.
Each admin also has to moderate staff 
    that is both equal to or greater than their supervisorial allocation 
    and has the ability to rate their moderation preference
Admin cannot supervise and moderate the same staff member.
Every staff member has to have both a supervisor and a moderator.
为了解决这个问题,我将它表示为一张表

  • a#=管理员
  • s#=员工
  • b=主管
  • v#=适度偏好(较低=较好)
以所附示例为例,我们可以看到

管理员1员工11317主管 他们自愿按照该顺序(优先)对员工2、20、10和23进行调整


忽略以上所有问题,这是我的问题分解 您可以将问题简化如下

  • 每一行都有相等或更多的主持人到主管
  • 每个专栏都有一个独特的主管和主持人(在可能的情况下,考虑到优先级越低越好)
  • 我希望我已经尽力解释好了这个问题,并且我的分析没有太复杂,任何关于我如何解决这个问题的建议都会很感激,这样它就可以扩展到更大的数据集


    谢谢。

    您可以在
    minizing
    中尝试以下MIP模型,并将解算器设置为
    OsiCbc

    int: n = 10;
    int: m = 24;
    set of int: ADMIN = 1..n;
    set of int: STAFF = 1..m;
    
    array[ADMIN,STAFF] of var 0..1: supervise;
    array[ADMIN,STAFF] of var 0..1: moderate;
    
    array[ADMIN, STAFF] of int: moderateValue = [|
    0,4,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,3,0,0,1,0|
    3,2,0,0,0,0,0,0,4,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0|
    0,0,1,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,3,0,0,0,2|
    0,0,0,1,0,0,0,0,0,0,3,2,0,0,0,0,0,4,0,0,0,0,0,0|
    0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,3,0,0,0,0,2,0,1|
    0,0,0,0,2,4,0,0,0,0,0,0,0,0,3,1,0,0,0,0,0,0,0,0|
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,2,3,0,0,0,0,0,0|
    0,2,0,0,0,0,0,4,0,0,0,0,3,1,0,0,0,0,0,0,0,0,0,0|
    0,0,0,0,0,0,3,0,0,0,0,4,0,0,2,1,0,0,0,0,0,0,0,0|
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,3,2,1|];
    
    % admin member cannot both supervise and moderate staff member
    constraint forall(a in ADMIN, s in STAFF)
        (supervise[a,s] + moderate[a,s] <= 1);
    
    % each staff member is supervised by exactly one admin member
    constraint forall(s in STAFF)
        (sum(col(supervise, s)) = 1);
    
    % each staff member is moderated by exactly one admin member
    constraint forall(s in STAFF)
        (sum(col(moderate, s)) = 1);
    
    % each admin member cannot supervise more staff members than moderated
    constraint forall(a in ADMIN)
        (sum(row(supervise, a)) <= sum(row(moderate, a)));
    
    var int: obj = sum(a in ADMIN, s in STAFF)(moderateValue[a,s]*moderate[a,s]);
    
    solve maximize obj;
    
    output ["obj = \(obj)\n"] ++ ["assignment = \n"] ++ [show2d(array2d(ADMIN, STAFF, [if supervise[a,s] = 1 then 1 elseif moderate[a,s] = 1 then 2 else 0 endif | a in ADMIN, s in STAFF]))];
    

    首先,谢谢你花时间帮我解决这个问题。我意识到我之前的评论毫无意义,所以我加入了一张图片来尝试解释。问题是,绿色b值是静态的,因此每列都有一个,解算器不必移动这些值,只要考虑它们的位置,就可以尝试为该特定列选择可用的黄色v#单元格。我希望这一后续行动有意义。
    b
    v#
    在这里代表什么?它是否分别进行监督和调节?什么是fix,什么是要决定的?Hi,‘b’表示查看样本数据的预定监督角色A1是s1、s13和s17的监督者。v#是可变调节选择,a1是s2、s10、s20和s23。我希望这有助于澄清问题。使用预定义的
    supervise
    更新了答案。我可以检查您使用的是哪个版本的Minizing吗?我有最新的IDE,但是它抛出了一个错误“minizing:type error:undefined identifier`mediatevalue'”,我将尝试使用以前的版本,因为它可能是一个bug。
    %array[ADMIN,STAFF] of var 0..1: supervise;
    
    array[ADMIN, STAFF] of int: supervise = [|
    1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0|
    0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0|
    0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0|
    0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0|
    0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0|
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0|
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0|
    0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0|
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1|
    0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0|];