我和本科生就多重背包问题做了一些进化算法研究。我已经完成了我的代码,但我很难理解测试用例的一个方面。我注意到他们有一个约束(权重或成本)矩阵,而不是列表。为什么?为什么物体的成本取决于它所在的背包?我当然可以添加算法来实现这一点,但我不了解它的应用程序。我发现的每个测试用例都采用这种格式。任何有关矩阵或具有一维约束的数据的帮助都将受到赞赏。
答案 0 :(得分:0)
作为旅行销售员的一篇受欢迎的论文说:
旅行推销员问题的普及并非源于数百万想要计算最佳路线的推销员。
根据您对问题的说明,我认为您在谈论Multiple-Choice Knapsack Problem(第12页)。用 P 表示价格矩阵, W 表示权重矩阵。
同样适用于背包问题。虽然故事是关于背包,背包可以是任何东西。
以例如调度问题为例。假设你有一个有三名员工的(虚拟)医院:两名医生和一名护士。现在,每天都会列出这些员工必须执行的任务(例如,检查患者,填写表格,......)。现在我们可以将每个员工都代表一个背包,因为他们当天的工作时间有限。
任务的权重描述了员工 i 处理任务 j 所需的时间。此外,它可用于指定禁止某项任务。例如,在比利时,持有A证书的护士不允许给患者注射。您可以通过指定护士花费数年时间来处理此类任务来强制执行此操作,因此该任务的“重量”相对于该行李的容量而言过大。
所以: w ij 描述员工 i 花费的时间来执行任务 j 并在上面设置如果该员工不能执行该任务的能力。
此外,该值例如是执行任务的质量。如果其中一位医生专门研究心脏病,显然他对心脏病患者的诊断会更好。或者,您可以使用支付员工处理该任务所需金额的倒数(如果员工按按任务付款),以最大限度地降低成本。
所以 p ij 指定员工 i 执行任务 j 的质量,或者例如员工 i 执行任务 j 的成本的倒数。
背包的最佳配置将指定员工当天将处理哪些任务,以使员工的工作时间超过允许的范围(或执行他/她未获得许可的任务),并进一步优化服务质量或最大限度地降低运营成本。
因此,如果 x ij = 1,这意味着在最佳方案中,员工 i 将执行任务 j 那天>。
因此,典型的应用程序是多个员工/机器/服务器以不同的成本和边界处理任务/问题/请求的应用程序。
在分配问题中,人们的目标是在二分图中构造一组边,使得没有两条边共享一个节点,并且总权重最大化。人们不能(显然)将MCKP映射到AP,因为权重会丢弃员工执行太多任务的情况,仅仅因为它是最佳的。
多目标变量将价格矩阵 P 转换为张量(或更高),以便您可以考虑不同的评估标准(例如质量和价格),并为这两个目标寻找最佳解决方案。
答案 1 :(得分:0)
我所指的测试数据是people.brunel.ac.uk/~mastjjb/jeb/orlib/files/mknap2.txt。看来这个数据是针对多维背包问题的。
这看起来像multiconstraint 0/1 knapsack problem的数据:正如您在该文章中看到的那样,有m
个约束:
Maximize
z = sum{j = 1 to n: c[j]*x[j]}
Subject to:
sum{j = 1 to n: a[i,j]*x[j]} <= b[i] i = 1, ..., m
x[j] in {0,1}
这是在您链接到的数据文档开头的以下参考文献中建议的:
模拟退火:A。Drexel(1988)“模拟退火 关于Multiconstraint Zero-One背包问题的方法。“ 计算,40:1-8。
它似乎是唯一符合数据格式的东西。