2012-01-14 2 views
3

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

Каков наилучший алгоритм поиска для вышеуказанной проблемы?

ответ

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 

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

+0

Это вдохновляющий комментарий. Я работал над похожим кодом. В основном я создал свой «B» для различных комбинаций s, r, l. Затем я ищу в этих матрицах. Еще один способ пойти. Но спасибо за комментарий – sosruko

+0

@sosruko, добро пожаловать в SO. Не стоит благодарить, согласитесь, если комментарий полезен. –

Смежные вопросы