from docplex.mp.model import Model from docplex.mp.environment import Environment ################# # Variables ################# # Max available power plant units per energy type energy_units = {'nuclear' : 3, 'gas' : 5, 'biomass' : 26} # Continuous power (MW) available per energy type for a single power plant energy_power = {'nuclear' : 2500, 'gas' : 600, 'biomass' : 100} env = Environment() env.print_information() model = Model(name="Energy_mix") # Variable : nb of power plants inside_vars = model.integer_var_dict(energy_units, name='inside') ################# # Constraints ################# # Resource capacity : nb of power plants must be smaller or equal to max available ones model.add_constraints(( model.sum(inside_vars[p]) <= model.sum(energy_units[p]), 'ct_demand_%s' % p[0]) for p in energy_units ) # Demand satisfaction : power sum me be greater or equal than 10 000 MW model.add_constraints(( model.sum(inside_vars[p]*energy_power[p] for p in energy_units) >= 10000, 'ct_demand_%s' % p[0]) for p in energy_units ) model.print_information() ################# # Objective ################# # Total power (sum over power plants and energy types) total_prod = ( model.sum( inside_vars[p] * energy_power[p] for p in energy_units ) ) model.minimize( total_prod ) ################# # Solution ################# model.solve() obj = model.objective_value print("* Production model solved with objective: {:g}".format(obj)) print("* Total inside cost=%g" % total_prod.solution_value) for p in energy_units: print("Inside production of {product}: {ins_var}".format(product=p, ins_var=inside_vars[p].solution_value))