具有“加权”边缘和顶点最小/最大容量的福特-福克森算法

时间:2018-11-02 10:51:35

标签: java algorithm sas max-flow

我的问题与此类似:

Ford-Fulkerson algorithm with "weighted" edges

但是,我结合了最小和最大容量的任务。边缘不仅具有权重(“训练”),而且必须分配每个学生,而且有些作业将没有学生分配给他们,有些作业将以学生的最大能力进行,而其他作业至少会尽力而为。

proc optmodel;
set Students = {'S1', 'S2', 'S3', 'S4', 'S5', 'S6'}; 
set Projects = {'P1', 'P2', 'P3'};   

number projMinCapacity{Projects} = [2, 2, 2];
number projMaxCapacity{Projects} = [3, 3, 3];

number ranking{Students, Projects} = [ 
1 2 0
2 1 0
0 1 2
2 1 0
1 0 2
2 0 1
];

var flow{Students, Projects} binary;

maximize z = sum{s in Students, p in Projects}(flow[s, p]*(ranking[s, p]));

con sumPerStudent{s in Students} : sum{ p in Projects}flow[s,p] = 1;
con maxFlow{p in Projects} : sum{s in Students}flow[s,p] <= projMaxCapacity[p];
con minFlow{p in Projects} : sum{s in Students}flow[s,p] >= projMinCapacity[p];

solve;
print z flow;
quit;

^我在这里将我的工作实现作为PoC包含在SAS Studio中,但是对于我的项目,我需要可以集成到Web应用程序中的东西。

所以我尝试弄乱PuLP,但是我的Python有点生锈,所以我非常感谢Java实现。是否有可以轻松使用的库?否则,对于具有相同要求的问题,一个好的参考实现是什么?

谢谢!

0 个答案:

没有答案