Как решить проблему линейного программирования Matlab - PullRequest
0 голосов
/ 07 ноября 2018

Я решаю следующую задачу линейного программирования, руководствуюсь документацией

Документация Matlab

Каждый раз, когда я выполняю, я получаю следующую ошибку

Размеры сцепляемых матриц не согласованы.

У меня есть целевая функция и ограничения следующим образом

%F.O
f=[0.669 0.654 0.503 0.683 0.670 0.673 0.749 0.655 0.660 0.583 1.243 0.639 2.024 2.156 1.672 0.473 0.139 0.687];

%Restrictions
Aeq=[0.1 0.12 0.335 0.15 0.18 0.19 0.12 0.15 0.15 0.15 0.15 0.11 0.13 0.46;
    0.3 0.24 0.03 0.05 0.04 0.27 0.03 0.24 0.15 0.52 0.52;
    0.1 0.12 0.31 0.15 0.19 0.08 0.2 0.12 0.15 0.50 0.34 0.44;
    0.26 0.50;
    0.06 0.17];

b=[285.71; 305.33; 450; 262.50; 41.50];

и я выполняю его с помощью следующей команды

x=linprog(f,Aeq,b)

Ограничения выводят их из следующего упражнения

Упражнение

Это должно быть результатом z

Результат

1 Ответ

0 голосов
/ 07 ноября 2018

Матрица должна иметь одинаковое количество столбцов в каждой строке.Aeq в вашем случае имеет разное количество столбцов.

Как это исправить?

Переменные, отсутствующие в уравнениях ограничений, имеют нулевые коэффициенты .Итак:

%Objective Function
     %X1    X2    X3    X4    X5    X6    X7    X8    X9    X10   X11   X12   X13   X14   X15   X16   X17   X18
f = [0.669 0.654 0.503 0.683 0.670 0.673 0.749 0.655 0.660 0.583 1.243 0.639 2.024 2.156 1.672 0.473 0.139 0.687];

A = [];   b = [];   %No inequality constraints

%Equality Constraints are:
     %X1  X2    X3   X4   X5   X6   X7   X8   X9   X10  X11   X12  X13  X14  X15  X16  X17  X18
Aeq=[0.1 0.12 0.335 0.15 0.18 0.19 0.12 0.15 0.15 0.15   0   0.15 0.11  0   0.13  0     0  0.46; %Nitrogeno
     0.3 0.24   0   0.03 0.05 0.04 0.27 0.03 0.24 0.15   0    0   0.52 0.52  0    0     0    0 ; %Fosforo
     0.1 0.12   0   0.31 0.15 0.19 0.08 0.2  0.12 0.15  0.50  0    0   0.34 0.44  0     0    0 ; %Potasio
      0    0    0    0    0    0    0    0    0    0     0   0.26  0    0    0    0    0.50  0 ; %Calcio
      0    0    0    0   0.06  0    0    0    0    0     0    0    0    0    0   0.17   0    0]; %Magnesio

beq = [285.71; 305.33; 450; 262.50; 41.50]; %What you defined as 'b' is actually `beq`

lb = zeros(18,1);   ub = inf(18,1);         %Bounds

[x, Optimal_sol] = linprog(f, A, b, Aeq, beq, lb, ub);

>> x
x =
   1.0e+03 *
    0.7142
         0
         0
    1.0268
         0
         0
         0
         0
         0
    0.4018
         0
         0
         0
         0
         0
    0.2441
    0.5250
         0

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