首页 > 解决方案 > 具有“加权”边和顶点最小/最大容量的 Ford-Fulkerson 算法

问题描述

我的问题与此类似:

具有“加权”边缘的 Ford-Fulkerson 算法

但是,我合并了作业的最小和最大容量。不仅边有一个权重(“训练”),而且每个学生都必须被分配,而且有些作业不会有学生分配给他们,有些作业将是学生的最大容量,而所有其他作业至少处于最低限度。

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;

^我已将我在 SAS Studio 中的工作实现作为 PoC 包含在此处,但对于我的项目,我需要可以合并到 Web 应用程序中的东西。

所以我试着弄乱 PuLP,但我的 Python 有点生疏,所以我真的很感激 Java 实现。有没有我可以轻松做到这一点的库?否则对于具有相同要求的问题的一个很好的参考实现?

谢谢!

标签: javaalgorithmsasmax-flow

解决方案


推荐阅读