def showsequence(s, setup): seq = msol.get_var_solution(s) visu.sequence(name=s.get_name()) vs = seq.get_value() for v in vs: nm = v.get_name() visu.interval(v, tp[id[nm]], compact(nm)) for i in range(len(vs) - 1): end = vs[i].get_end() tp1 = tp[id[vs[i].get_name()]] tp2 = tp[id[vs[i + 1].get_name()]] visu.transition(end, end + setup.get_value(tp1, tp2))
# Solve model print("Solving model....") msol = mdl.solve(FailLimit=30000, TimeLimit=10) print("Solution: ") msol.print_solution() ############################################################################## # Display result ############################################################################## if msol and visu.is_visu_enabled(): load = [CpoStepFunction() for j in range(nb_renewable)] for m in modes_data: itv = msol.get_var_solution(modes[m]) if itv.is_present(): for j in range(nb_renewable): if 0 < m.demand_renewable[j]: load[j].add_value(itv.get_start(), itv.get_end(), m.demand_renewable[j]) visu.timeline("Solution for RCPSPMM " + filename) visu.panel("Tasks") for t in tasks_data: visu.interval(msol.get_var_solution(tasks[t]), int(t.name[1:]), t.name) for j in range(nb_renewable): visu.panel("R " + str(j + 1)) visu.function(segments=[(INTERVAL_MIN, INTERVAL_MAX, cap_renewables[j])], style='area', color='lightgrey') visu.function(segments=load[j], style='area', color=j) visu.show()
mdl.add(minimize(max([end_of(OPS[o[0]]) for o in ops]))) ############################################################################## # Model solving ############################################################################## # Solve model print("Solving model....") msol = mdl.solve(FailLimit=100000, TimeLimit=10) print("Solution: ") msol.print_solution() ############################################################################## # Display result ############################################################################## # Draw solution if msol and visu.is_visu_enabled(): visu.timeline("Solution for flexible job-shop " + filename) visu.panel("Machines") for j in range(nb_mchs): visu.sequence(name='M' + str(j)) for v in MACHS[j]: itv = msol.get_var_solution(v) if itv.is_present(): job = Job[v.get_name()] visu.interval(itv, job, 'J' + str(job)) visu.show()
############################################################################## # Solve model print("Solving model....") msol = mdl.solve(FailLimit=100000, TimeLimit=10) print("Solution: ") msol.print_solution() ############################################################################## # Display result ############################################################################## if msol and visu.is_visu_enabled(): load = [CpoStepFunction() for j in range(nbResources)] for i in range(nbTasks): itv = msol.get_var_solution(tasks[i]) for j in range(nbResources): if 0 < demands[i][j]: load[j].add_value(itv.get_start(), itv.get_end(), demands[i][j]) visu.timeline("Solution for RCPSP " + filename) visu.panel("Tasks") for i in range(nbTasks): visu.interval(msol.get_var_solution(tasks[i]), i, tasks[i].get_name()) for j in range(nbResources): visu.panel("R " + str(j + 1)) visu.function(segments=[(INTERVAL_MIN, INTERVAL_MAX, capacities[j])], style="area", color="lightgrey") visu.function(segments=load[j], style="area", color=j) visu.show()
print("Solution: ") msol.print_solution() ############################################################################## # Display result ############################################################################## def compact(name): # Example: H3-garden -> G3 # ^ ^ loc, task = name[1:].split('-', 1) return task[0].upper() + loc if msol and visu.is_visu_enabled(): workers_function = CpoStepFunction() for v in all_tasks: itv = msol.get_var_solution(v) workers_function.add_value(itv.get_start(), itv.get_end(), 1) visu.timeline('Solution SchedState') visu.panel(name="Schedule") for v in all_tasks: visu.interval(msol.get_var_solution(v), house[v], compact(v.get_name())) visu.panel(name="Houses state") for f in all_state_functions: visu.sequence(name=f.get_name(), segments=msol.get_var_solution(f)) visu.panel(name="Nb of workers") visu.function(segments=workers_function, style='line') visu.show()
print("Solving model....") msol = mdl.solve(TimeLimit=10, FailLimit=250000) print("Solution: ") msol.print_solution() ############################################################################## # Display result ############################################################################## if msol and visu.is_visu_enabled(): import docplex.cp.utils_visu as visu import matplotlib.pyplot as plt makespan_values = [msol.get_var_solution(m).get_value() for m in makespans] plt.hist(makespan_values, color='skyblue') plt.axvline(msol.get_objective_values()[0], color='navy', linestyle='dashed', linewidth=2) plt.title("Makespan histogram") plt.xlabel("Value") plt.ylabel("Frequency") visu.timeline("Solution sequencing for stochastic job-shop " + filename) visu.panel("Machines") for j in range(nb_machines): visu.sequence(name='M' + str(j)) itvs = msol.get_var_solution(ref_sequences[j]).get_value() for v in itvs: k, i, m = v.get_name().split('-') visu.interval(v, int(i), 'O' + i + '-' + m) visu.show()
print("Solution: ") msol.print_solution() ############################################################################## # Display result ############################################################################## def compact(name): # Example: H3-garden -> G3 # ^ ^ loc, task = name[1:].split('-', 1) return task[0].upper() + loc # Draw solution if msol and visu.is_visu_enabled(): visu.timeline('Solution SchedOptional', 0, deadline) for w in range(nbWorkers): visu.sequence(name=workerNames[w]) for t in worker_tasks[w]: wt = msol.get_var_solution(t) if wt.is_present(): if desc[t].skills[w] == max(desc[t].skills): # Green-like color when task is using the most skilled worker color = 'lightgreen' else: # Red-like color when task does not use the most skilled worker color = 'salmon' visu.interval(wt, color, compact(wt.get_name())) visu.show()
############################################################################## print("Solving model....") msol = mdl.solve(TimeLimit=10) print("Solution: ") msol.print_solution() ############################################################################## # Display result ############################################################################## if msol and visu.is_visu_enabled(): visu.timeline("Solution SchedTime", origin=10, horizon=120) visu.panel("Schedule") for t in ALL_TASKS: visu.interval(msol.get_var_solution(tasks[t.id]), t.id, t.name) for t in ALL_TASKS: if t.release_date is not None: visu.panel("Earliness") itvsol = msol.get_var_solution(tasks[t.id]) cost = fearliness[t].get_value(itvsol.get_start()) visu.function(segments=[(itvsol, cost, t.name)], color=t.id, style="interval") visu.function(segments=fearliness[t], color=t.id) if t.due_date is not None: visu.panel("Tardiness") itvsol = msol.get_var_solution(tasks[t.id]) cost = ftardiness[t].get_value(itvsol.get_end()) visu.function(segments=[(itvsol, cost, t.name)], color=t.id, style="interval") visu.function(segments=ftardiness[t], color=t.id) visu.show()
############################################################################## # Display result ############################################################################## def compact(name): # Example: H3-garden -> G3 # ^ ^ loc, task = name[1:].split('-', 1) return task[0].upper() + loc if msol and visu.is_visu_enabled(): workersF = CpoStepFunction() cashF = CpoStepFunction() for p in range(5): cashF.add_value(60 * p, INT_MAX, 30000) for task in all_tasks: itv = msol.get_var_solution(task) workersF.add_value(itv.get_start(), itv.get_end(), 1) cashF.add_value(itv.start, INT_MAX, -200 * desc[task].duration) visu.timeline('Solution SchedCumul') visu.panel(name="Schedule") for task in all_tasks: visu.interval(msol.get_var_solution(task), house[task], compact(task.get_name())) visu.panel(name="Workers") visu.function(segments=workersF, style='area') visu.panel(name="Cash") visu.function(segments=cashF, style='area', color='gold') visu.show()
import docplex.cp.utils_visu as visu import matplotlib.pyplot as plt get_ipython().run_line_magic('matplotlib', 'inline') #Change the plot size from pylab import rcParams rcParams['figure.figsize'] = 15, 3 workers_function = CpoStepFunction() for h in Houses: for t in TaskNames: itv = msol6.get_var_solution(task[h,t]) workers_function.add_value(itv.get_start(), itv.get_end(), 1) visu.timeline('Solution SchedState') visu.panel(name="Schedule") for h in Houses: for t in TaskNames: visu.interval(msol6.get_var_solution(task[h,t]), h, t) visu.panel(name="Houses state") for h in Houses: f = state[h] visu.sequence(name=f.get_name(), segments=msol6.get_var_solution(f)) visu.panel(name="Nb of workers") visu.function(segments=workers_function, style='line') visu.show() else: print("No solution found")
mdl.add(mdl.minimize(mdl.max([mdl.end_of(t) for t in tasks]))) #----------------------------------------------------------------------------- # Solve the model and display the result #----------------------------------------------------------------------------- # Solve model print("Solving model....") msol = mdl.solve(FailLimit=100000, TimeLimit=10) print("Solution: ") msol.print_solution() if msol and visu.is_visu_enabled(): load = [CpoStepFunction() for j in range(NB_RESOURCES)] for i in range(NB_TASKS): itv = msol.get_var_solution(tasks[i]) for j in range(NB_RESOURCES): if 0 < DEMANDS[i][j]: load[j].add_value(itv.get_start(), itv.get_end(), DEMANDS[i][j]) visu.timeline("Solution for RCPSP " + filename) visu.panel("Tasks") for i in range(NB_TASKS): visu.interval(msol.get_var_solution(tasks[i]), i, tasks[i].get_name()) for j in range(NB_RESOURCES): visu.panel("R " + str(j + 1)) visu.function(segments=[(INTERVAL_MIN, INTERVAL_MAX, CAPACITIES[j])], style='area', color='lightgrey') visu.function(segments=load[j], style='area', color=j) visu.show()
def compact(name): # Example: H3-garden -> G3 # ^ ^ loc, task = name[1:].split('-', 1) return task[0].upper() + loc # Solve model print("Solving model....") msol = mdl.solve(TimeLimit=10, FailLimit=10000) print("Solution: ") msol.print_solution() if msol and visu.is_visu_enabled(): workers_function = CpoStepFunction() for v in all_tasks: itv = msol.get_var_solution(v) workers_function.add_value(itv.get_start(), itv.get_end(), 1) visu.timeline('Solution SchedState') visu.panel(name="Schedule") for v in all_tasks: visu.interval(msol.get_var_solution(v), house[v], compact(v.get_name())) visu.panel(name="Houses state") for f in all_state_functions: visu.sequence(name=f.get_name(), segments=msol.get_var_solution(f)) visu.panel(name="Nb of workers") visu.function(segments=workers_function, style='line') visu.show()
#----------------------------------------------------------------------------- # Solve model print("Solving model....") msol = mdl.solve(FailLimit=30000, TimeLimit=10) print("Solution: ") msol.print_solution() if msol and visu.is_visu_enabled(): load = [CpoStepFunction() for j in range(NB_RENEWABLE)] for m in modes_data: itv = msol.get_var_solution(modes[m]) if itv.is_present(): for j in range(NB_RENEWABLE): if 0 < m.demand_renewable[j]: load[j].add_value(itv.get_start(), itv.get_end(), m.demand_renewable[j]) visu.timeline("Solution for RCPSPMM " + filename) visu.panel("Tasks") for t in tasks_data: visu.interval(msol.get_var_solution(tasks[t]), int(t.name[1:]), t.name) for j in range(NB_RENEWABLE): visu.panel("R " + str(j + 1)) visu.function(segments=[(INTERVAL_MIN, INTERVAL_MAX, CAPACITIES_RENEWABLE[j])], style='area', color='lightgrey') visu.function(segments=load[j], style='area', color=j) visu.show()
def compact(name): # Example: H3-garden -> G3 # ^ ^ loc, task = name[1:].split('-', 1) return task[0].upper() + loc # Solve model print("Solving model....") msol = mdl.solve(FailLimit=10000, TimeLimit=10) print("Solution: ") msol.print_solution() # Draw solution if msol and visu.is_visu_enabled(): visu.timeline('Solution SchedOptional', 0, DEADLINE) for w in range(NB_WORKERS): visu.sequence(name=WORKER_NAMES[w]) for t in worker_tasks[w]: wt = msol.get_var_solution(t) if wt.is_present(): if desc[t].skills[w] == max(desc[t].skills): # Green-like color when task is using the most skilled worker color = 'lightgreen' else: # Red-like color when task does not use the most skilled worker color = 'salmon' visu.interval(wt, color, compact(wt.get_name())) visu.show()