2015-03-04 2 views
0

Я пытаюсь сформулировать и решить проблему линейного программирования с помощью функции spicy.optimize.linprog.Линейное программирование с использованием spicy.optimize.linprog

Я хочу, чтобы решить эту тему функции Ах = Ь следующие ограничения:

# A      b 
-0.4866 x1 + 0.1632 x2 < 0 
0.3211 x1 + 0.5485 x2 < 0 
-0.5670 x1 + 0.1099 x2 < 0 
-0.1070 x1 + 0.0545 x2 = 1 
-0.4379 x1 + 0.1465 x2 < 0 
0.0220 x1 + 0.7960 x2 < 0 
-0.3673 x1 - 0.0494 x2 < 0 

У меня в качестве входных данных матрицы NX2 A и nx1 матрицы b. Результатом должны быть векторы x1 и x2. Вот мои входные данные.

# Coefficients 

A = [[-0.4866, 0.1632], 
    [0.3211, 0.5485], 
    [-0.5670, 0.1099], 
    [-0.1070, 0.0545], 
    [-0.4379, 0.1465], 
    [0.0220, 0.7960], 
    [-0.3673, -0.0494]] 

# Inequalities 

b = [0, 0, 0, -1, 0, 0, 0] 

Я думаю, что моя проблема заключается в том, чтобы сформулировать c, то функцию, быть минимизированы для ввода в функцию linprog.

res = linprog(c, A, b) 

ответ

0

Я могу решить для верхних границ по:

c = [1, 0, 0] 

A = [[-1, -0.486, 0.1632], 
    [-1, 0.3211, 0.5485], 
    [-1, -0.5670, 0.1099], 
    [-1, -0.1070, 0.0545], 
    [-1, -0.4379, 0.1465], 
    [-1, 0.220, 0.7960], 
    [-1,-0.3673, -0.0494]] 

b = [0, 0, 0, -1, 0, 0, 0] 

c0_bounds = (0, 1) 
x1_bounds = (-np.inf, np.inf) 
x2_bounds = (-np.inf, np.inf) 

res = linprog(c, A_ub=A, b_ub=b, bounds=(c0_bounds, x1_bounds, x2_bounds), options={"disp": True}) 

Но теперь, что если я хочу, чтобы решить для нижних границ?

+1

Кажется, что один из способов найти нижнюю границу - это перевернуть знаки в последних двух столбцах А. – srmulcahy

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