Поиск оптимальных алгоритмов поиска точек - PullRequest
3 голосов
/ 15 января 2012

У меня есть целевая функция B (s, r, l), я вычислил результаты для s = 1, ..., 10, r = 1, ..., 10 и l = 0,1: 0,1: 10. для каждого s я сгенерировал 10 по размеру (l) матриц. Я хочу написать код поискового кода, чтобы он возвращал мне минимальные значения 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 Ответ

3 голосов
/ 15 января 2012

Я бы предложил сделать 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

В конце попробуйте проверить все целочисленные решения - попробуйтеокруглите каждое значение до этаж или ceil .Будет 2 ^ 6 возможностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...