【问题标题】:Find the combination that minimizes a cost function找到最小化成本函数的组合
【发布时间】:2013-03-04 16:12:40
【问题描述】:

我遇到了一个问题,我会感谢任何可以提供帮助的人。问题如下:

假设我们有一个向量D = [D1;D2;D3;...;DN] 和一组时间实例TI = {t1,t2,t3,...,tM}。向量DDi 的每个元素对应于TI 的一个子集。例如D1 可以对应于时间实例{t1,t2,t3} 和 D2 对应于{t2,t4,t5}

我想找到与TI 的所有元素相对应的D 的元素组合,其中任何一个都不会被多次考虑,同时最小化成本函数sum(Dj) . Dj 是向量 D 的元素,每个元素对应一组时间实例。

让我举个例子。让我们考虑一个向量

D = [15;10;5;2;35;15;25;25;25;30;45;5;1;40] 

还有一套

TI={5,10,15,20,25,30} 

每个D元素对应

{[5 15];[5 20];[5 25];[5 30];[5 15 20];[5 20 25];[5 15 30];[5 20 25 30];[10 15];[10 20];[10 25];[10 15 20];[10 15 20 25];[10 30]} 

分别,例如D(1)=15 对应时间实例 [5 15]。

程序必须提出的解决方案是 D(4) 和 D(12) 的组合,即分别为 2 和 1,具有最小和并对应所有时间实例。

我不得不提到,该过程必须能够处理大向量。

感谢您的每一次帮助!

【问题讨论】:

  • 我的方法如下:我开始使用 combntns 函数,我正在尝试 D 元素的几种组合。之后,我检查所有时间实例都考虑了哪些组合,没有考虑任何组合两次。然后我将与最小总和的组合作为解决方案。我的问题是我的方法真的很慢,我正在寻找可以使程序更快的不同方法。
  • 使用matlab的bintprog
  • 我刚通过。如果我错了,请纠正我,但这就是我的想法:你有一组时间实例。然后你有一组它的一些子集,每个子​​集都有一个权重。然后你想以最低的成本重建整个集合?
  • @DedekMraz 并且权重应该是二进制的。
  • @Shai 您能否详细说明一下,因为我对 bintprog 的实现不是很清楚。谢谢。

标签: matlab combinations minimize


【解决方案1】:

二进制权重向量 x 在每个 D_i 上放置一个权重。

设 f=[D1;D2;...;DN]。

A的j列,A_j是一个二元向量。

如果 D_j 对应于 Tk,则 A_jk 为 1,否则为零。

问题是:

min f^T*x  s.t.  A*x=1;

然后使用bintprog解决。

x = bintprog(f,[],[],A,ones(M,1))

【讨论】:

  • 非常感谢您的努力和帮助!
  • 请考虑您调用了 bintprog 并且解决方案对应于最小值,但并不完全符合您的要求。你能回忆一下 bintprog 并说它不应该考虑之前给出的解决方案 x 吗?
  • 整数规划不能保证全局最优。您可能有一个比 intprog 产生的解决方案更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 2021-10-13
  • 2019-11-16
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多