# using known values s = pmo.sos([v1,v2], weights=[1.2,2.5]) assert s.weights == (1.2,2.5) # using paramters p = pmo.parameter_list( pmo.parameter() for i in range(2)) s = pmo.sos([v1,v2], weights=[p[0]**2, p[1]**2]) assert len(s.weights) == 2 p[0].value = 1 p[1].value = 2 assert tuple(pmo.value(w) for w in s.weights) == (1, 4) # using data expressions d = pmo.expression_list( pmo.data_expression() for i in range(2)) s = pmo.sos([v1,v2], weights=d) assert len(s.weights) == 2 d[0].expr = p[0] + 1 d[1].expr = p[0] + p[1] assert tuple(pmo.value(w) for w in s.weights) == (2, 3) # # Example model (discontiguous variable domain) # domain = [-1.1, 4.49, 8.1, -30.2, 12.5] m = pmo.block() m.z = pmo.variable_list(
for j in m.q: m.cl.append(pmo.constraint(lb=-5, body=m.vl[j] - m.v, ub=5)) # @Constraints_list # @Expressions_single m.e = pmo.expression(-m.v) # @Expressions_single # @Expressions_dict m.ed = pmo.expression_dict() for i in m.s: m.ed[i] = \ pmo.expression(-m.vd[i]) # @Expressions_dict # @Expressions_list # uses 0-based indexed m.el = pmo.expression_list() for j in m.q: m.el.append(pmo.expression(-m.vl[j])) # @Expressions_list # @Objectives_single m.o = pmo.objective(-m.v) # @Objectives_single # @Objectives_dict m.od = pmo.objective_dict() for i in m.s: m.od[i] = \ pmo.objective(-m.vd[i]) # @Objectives_dict # @Objectives_list # uses 0-based indexing
model.con_worker = pmo.constraint_list() for _worker in model.set_workers: model.con_worker.append( pmo.constraint( sum(model.var_x[(_worker, _task)] for _task in model.set_tasks) <= 1)) ## Each task is assigned to exactly 1 worker model.con_task = pmo.constraint_list() for _task in model.set_tasks: model.con_task.append( pmo.constraint( sum(model.var_x[(_worker, _task)] for _worker in model.set_workers) == 1)) # Create the objective expr = pmo.expression_list() for _worker in model.set_workers: for _task in model.set_tasks: expr.append( pmo.expression(model.param_cost[(_worker, _task)] * model.var_x[(_worker, _task)])) model.obj = pmo.objective(sum(expr), sense=pmo.minimize) # Solve opt = pmo.SolverFactory('cplex') result = opt.solve(model) # Print the solution if result.solver.termination_condition == TerminationCondition.optimal or result.solver.status == SolverStatus.ok: print('Total cost = ', pmo.value(model.obj), '\n') for i in range(NUM_WORKERS):
# @Constraints_list # @Expressions_single m.e = pmo.expression(-m.v) # @Expressions_single # @Expressions_dict m.ed = pmo.expression_dict() for i in m.s: m.ed[i] = \ pmo.expression(-m.vd[i]) # @Expressions_dict # @Expressions_list # uses 0-based indexed m.el = pmo.expression_list() for j in m.q: m.el.append( pmo.expression(-m.vl[j])) # @Expressions_list # @Objectives_single m.o = pmo.objective(-m.v) # @Objectives_single # @Objectives_dict m.od = pmo.objective_dict() for i in m.s: m.od[i] = \ pmo.objective(-m.vd[i])