CPLEX и epgap - PullRequest
       24

CPLEX и epgap

0 голосов
/ 02 июля 2019

У меня есть код, который генерирует 150 различных составов. Я хочу использовать cplex как можно ближе к жадному решению. Я читал, что если вы сделаете epgap достаточно большим, это будет имитировать жадный подход. Это правда? и если да, что я должен установить epgap?

import pulp
from pulp import *
from pulp.solvers import CPLEX_PY
from pydfs_lineup_optimizer import get_optimizer, Site, Sport,CSVLineupExporter
from pydfs_lineup_optimizer.solvers.pulp_solver import PuLPSolver
import time
start_time = time.time()
class CustomPuLPSolver(PuLPSolver):
    LP_SOLVER = pulp.CPLEX_PY(msg=0,epgap=.1)
optimizer = get_optimizer(Site.FANDUEL, Sport.BASEBALL, solver=CustomPuLPSolver)
optimizer.load_players_from_csv("/Users/austi/Desktop/MLB/PLAYERS_LIST.csv")
optimizer.restrict_positions_for_opposing_team(['P'], ['1B','C','2B','3B','SS','OF','UTIL'])
optimizer.set_spacing_for_positions(['SS','C','1B','3B','OF','2B'], 4)
optimizer.set_team_stacking([4])
optimizer.set_max_repeating_players(7)
lineups = list(optimizer.optimize(n=150))
for lineup in lineups:
    print(lineup)
exporter = CSVLineupExporter(lineups)
exporter.export('MLB_result.csv')
print(round(((time.time() - start_time)/60)), "minutes run time")

1 Ответ

2 голосов
/ 02 июля 2019

Нет, это не правда (где вы это читали?).Если для параметра epgap установлено значение N, CPLEX останавливается, как только относительная разница между наиболее известным возможным решением и нижней границей (для задач минимизации) оптимального решения падает ниже N.

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

Если вам явно требуется жадное решение, у вас есть два варианта:

  1. Вычислить это жадное решение самостоятельно
  2. Измените вашу модель так, чтобы единственным возможным решением было жадное решение.
...