Как создать некоторые возможные решения в CPLEX-PYTHON (не docplex)? - PullRequest
1 голос

Я работаю над диссертацией о вариантной форме задачи маршрутизации транспортных средств (VRP) с использованием подхода линейного математического программирования.У меня есть хорошо протестированная модель, которую я сформулировал, но эта модель решается за приемлемое время вычислений максимум для 30 узлов, поэтому мне нужно реализовать некоторую метаэвристику, чтобы найти хорошие выполнимые решения для больших экземпляров, поэтому здесь возникает вопрос.Я знаю, что могу генерировать некоторые решения, используя команду python-cplex solution_pool (что-то подобное), поэтому я хотел бы помочь узнать, как сгенерировать и получить доступ к этим решениям (значение целевой функции, значения переменных решения и т. Д.), Моя модельcplex объектная модель.Я знаю, что это возможно, если бы вы могли мне помочь, это было бы здорово.Заранее благодарю и приветствую из Чили.

Ответы [ 2 ]

2 голосов
/ 27 мая 2019

Получив объект cpx, вы можете написать

cpx.populate_solution_pool()
numsol = cpx.solution.pool.get_num()
print("The solution pool contains %d solutions." % numsol)
meanobjval = cpx.solution.pool.get_mean_objective_value()

sol_pool = []
for i in range(numsol):
    objval_i = cpx.solution.pool.get_objective_value(i)
    x_i = cpx.solution.pool.get_values(i)
    nb_vars=len(x_i)
    sol = []
    for k in range(nb_vars):
        sol.append(x_i[k])
    sol_pool.append(sol)
print("pools =",sol_pool)
0 голосов
/ 27 мая 2019

Решение в пуле решений доступно в атрибуте Cplex.solution.pool, см. Справочную документацию здесь .

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

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