def add_mip_starts(mip, indices, pool, max_mip_starts=float('inf'), mip_start_effort_level=4):
"""
Parameters
----------
mip - RiskSLIM surrogate MIP
indices - indices of RiskSLIM surrogate MIP
pool - solution pool
max_mip_starts - max number of mip starts to add (optional; default is add all)
mip_start_effort_level - effort that CPLEX will spend trying to fix (optional; default is 4)
Returns
-------
"""
try:
obj_cutoff = mip.parameters.mip.tolerances.uppercutoff.get()
except:
obj_cutoff = np.inf
n_added = 0
for k in range(0, len(pool)):
if n_added < max_mip_starts:
if pool.objvals[0] <= (obj_cutoff + np.finfo('float').eps):
mip_start_name = "mip_start_" + str(n_added)
mip_start_obj, _ = convert_to_risk_slim_cplex_solution(rho=pool.solutions[k, ], indices = indices, objval=pool.objvals[k])
mip.MIP_starts.add(mip_start_obj, mip_start_effort_level, mip_start_name)
n_added += 1
else:
break
return mip
# Data-Related Computation
评论列表
文章目录