linprog дает неправильное решение? - PullRequest
1 голос
/ 08 марта 2012

Я пытаюсь решить проблему линейного программирования в Matlab, ввод

[weights,~,flag]=linprog(f,[],[],C,b,0,10);

так, согласно инструкции это должно решить проблему min f*x with the constraints C*x=b and 0<=x<=10. Таким образом, все записи x должны быть положительными. Однако решение, которое я получаю, содержит отрицательные записи (см. Пример, чтобы воспроизвести проблему ниже). Флаг, который я получаю, равен 1, что в соответствии с документами означает, что метод сходится.

Что я делаю не так?

здесь ввод

C =

    19    20    18    20    18
     3     3     4     5     3
     1     1     1     1     2
     1     1     1     1     1

и

b =

    19
     4
     1
     1

и

f =

     1
     1
     1
     1

результат

weights =

   84.1104
  -62.8328
  -41.5552
   21.2776
   -0.0000

1 Ответ

2 голосов
/ 08 марта 2012

ОК, я нашел проблему: я думал, что нижняя граница и верхняя граница - это скаляры, но они являются векторами, определяющими для каждой координаты, каковы ее верхняя и нижняя границы, поэтому правильный способ вызова функции -

[weights,~,flag]=linprog(f,[],[],C,b,zeros(size(C,2),1,1),ones(size(C,2))*10);
...