AttributeError: модуль 'cplex' не имеет атрибута 'Cplex' - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь оптимизировать задачу линейного программирования с использованием CPLEX в Python. Я уже установил IBM ILOG CPLEX Studio, а также docplex на Python.

При запуске программы возникает следующая ошибка:

AttributeError: module 'cplex' has no attribute 'Cplex'

Полезный код:

import docplex.mp.model as cpx

import random

import pandas as pd

n = 10
m = 5
set_I = range(1, n+1)
set_J = range(1, m+1)
c = {(i,j): random.normalvariate(0,1) for i in set_I for j in set_J}
a = {(i,j): random.normalvariate(0,5) for i in set_I for j in set_J}
l = {(i,j): random.randint(0,10) for i in set_I for j in set_J}
u = {(i,j): random.randint(10,20) for i in set_I for j in set_J}
b = {j: random.randint(0,30) for j in set_J}


opt_model = cpx.Model(name="MIP Model")

# if x is Binary
x_vars  = {(i,j): opt_model.binary_var(name="x_{0}_{1}".format(i,j)) for i in set_I for j in set_J}


# <= constraints
constraints = {j : opt_model.add_constraint(ct=opt_model.sum(a[i,j] * x_vars[i,j] for i in set_I) <= b[j], ctname="constraint_{0}".format(j)) for j in set_J}

objective = opt_model.sum(x_vars[i,j] * c[i,j] for i in set_I  for j in set_J)

opt_model.minimize(objective)

opt_model.solve()


opt_df = pd.DataFrame.from_dict(x_vars, orient="index", columns = ["variable_object"])

opt_df.index = pd.MultiIndex.from_tuples(opt_df.index, names=["column_i", "column_j"])
opt_df.reset_index(inplace=True)

opt_df["solution_value"] = opt_df["variable_object"].apply(lambda item: item.solution_value)

print(opt_df)

Я извлек этот код из: https://medium.com/@m.moarefdoost/optimization-modeling-in-python-pulp-gurobi-and-cplex-7f25acb03d7d

Я новичок в CPLEX и Python, поэтому я просто попытался запустить этот код, чтобы убедиться, что я все правильно установил.

У кого-нибудь была такая же проблема?

1 Ответ

0 голосов
/ 09 октября 2019

Я нашел ошибку моего кода. На самом деле, я не установил правильно setup.py перед запуском моего кода.

После этого все работает хорошо!

...