Python Линейное программирование целлюлозы с использованием ограничений в матричной форме - PullRequest
1 голос
/ 04 февраля 2020

Используя целлюлозу и python Я пытаюсь решить водный баланс (аналогично классической проблеме транспорта * 1034). Задача линейного программирования в виде:

свести к минимуму c 'x зависит от :

Ax = b

фунт <= x <= ub </p>

, где A - матрица (10x18), c (1x18) и b (10x1) - векторы и U (18x2) - это матрица из двух столбцов, включающая соответственно lb и ub.

import pulp as p
import pandas as pd
import numpy as np

A=pd.read_csv(r"C:\...\A.csv",delimiter=',',dtype='int8',header=None)
A=A.to_numpy()

c=pd.read_csv(r"C:\...\c.csv",delimiter=',',dtype='float64',header=None)
c=c.to_numpy()

U=pd.read_csv(r"C:\...\U.csv",delimiter=',',dtype='float64',header=None)

b=pd.read_csv(r"C:\...\b.csv",delimiter=',',dtype='float64',header=None)
b=b.to_numpy()

# Create a LP Minimization problem 
Lp_prob = p.LpProblem('Problem', p.LpMinimize)  

# Create problem Variables  
x = p.LpVariable("x", lowBound = U[0], upBound = U[1])   # Create a variable x

# Objective Function
c=np.transpose(c)
Lp_prob+= p.lpSum(c*x)

# Constraints: 
Lp_prob += p.lpSum(A*x) == b

# Display the problem 
print(Lp_prob) 

status = Lp_prob.solve()   # Solver 
print(p.LpStatus[status])   # The solution status 

# Printing the final solution 
print(p.value(x), p.value(Lp_prob.objective)) 

Вопрос Когда я пытаюсь запустить проект, отображается сообщение

"Файл" C: \ Users \ stavroula \ Anaconda3 \ lib \ site-packages \ pandas \ core \ generi c .py ", строка 1555, в ненулевое self . class . name

ValueError: Значение истинности Series неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all (). "

Почему это происходит?

Проблема может быть успешно решена с помощью процедуры scipy.optimize.linprog ().

Заранее спасибо !!

1 Ответ

0 голосов
/ 05 февраля 2020

PuLP не использует матричную запись. Так что A*x становится чем-то вроде (в нотации псевдокода):

sum_j A[i,j]*x[j]

Если вы хотите использовать матричную нотацию, взгляните на CVXPY.

...