搜索最佳点搜索算法

时间:2012-01-14 21:03:07

标签: algorithm matlab search optimization

我有一个目标函数B(s,r,l),我计算s = 1,...,10,r = 1,...,10和l = 0.1:0.1:10的结果。对于每个s,我通过sizeof(l)矩阵生成10。我想写一个搜索代码,这样它会返回最小的B值。以更清晰的形式

Minimize B(s1,r1,l1)+B(s2,r2,l2)+B(s3,r3,l3)

s.t s1+s2+s3 = 10

r1 +r2 +r3 = 15

l1+l2+l3 = 30

s1,s2,s3,r1,r2,r3,l1,l2,l3 >=0
s and r are integer.

针对上述问题的最佳搜索算法是什么?

1 个答案:

答案 0 :(得分:3)

我建议让l3,r3,s3依赖于另一个变量的选择。例如,如果 l1 = 1 l2 = 2 ,则表示 l3 = 30 - 1 - 2 。所以你只剩下6个参数来搜索 然后你应该使用某种非线性优化方法,比如 fminsearh 。根据这6个参数定义功能。
如果你的函数是平滑的,那么整数解决方案应该接近真正的解决方案。

为了处理非零条件,你可以简单地给任何给出负输出的输入一个巨大的错误。

所以,你的功能应该是这样的:

function d = f(l1,l2,s1,s2,r1,r2)
      l3 = 30 - l1 - l2;
      r3 = 15 - r1 - r2;
      s3 = 10 - s1 - s2;
      z = B(s1,r1,l1)+B(s2,r2,l2)+B(s3,r3,l3);
      if z<0 
          d = 10^20;
      else
          d = z;
      end
end

最后,尝试检查所有整数解决方案 - 尝试将每个值四舍五入为 floor ceil 。将有2 ^ 6种可能性。