CPLEX 和 epgap

CPLEX and epgap

我有一些代码可以生成 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")

不,这不是真的(你从哪里读到的?)。将参数 epgap 设置为 N 会告诉 CPLEX 在最优解的最佳已知可行解与下限(对于最小化问题)之间的相对差异低于 N 时立即停止。

这并没有说明如何找到最知名的可行解决方案。它可能来自任何启发式算法,甚至可能来自积分节点。

如果您明确需要一个贪婪的解决方案,那么您有两个选择:

  1. 自己计算贪心解
  2. 修改您的模型,使唯一可行的解​​决方案成为贪心解决方案。