from __future__ import print_function
from ortools.linear_solver import pywraplp
defLinearProgrammingExample():"""Linear programming sample."""# Instantiate a Glop solver, naming it LinearExample.
solver = pywraplp.Solver('LinearProgrammingExample',
pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)# Create the two variables and let them take on any non-negative value.
x = solver.NumVar(0, solver.infinity(),'x')
y = solver.NumVar(0, solver.infinity(),'y')# Constraint 0: x + 2y <= 14.
constraint0 = solver.Constraint(-solver.infinity(),14)
constraint0.SetCoefficient(x,1)
constraint0.SetCoefficient(y,2)# Constraint 1: 3x - y >= 0.
constraint1 = solver.Constraint(0, solver.infinity())
constraint1.SetCoefficient(x,3)
constraint1.SetCoefficient(y,-1)# Constraint 2: x - y <= 2.
constraint2 = solver.Constraint(-solver.infinity(),2)
constraint2.SetCoefficient(x,1)
constraint2.SetCoefficient(y,-1)# Objective function: 3x + 4y.
objective = solver.Objective()
objective.SetCoefficient(x,3)
objective.SetCoefficient(y,4)
objective.SetMaximization()# Solve the system.
solver.Solve()
opt_solution =3* x.solution_value()+4* y.solution_value()print('Number of variables =', solver.NumVariables())print('Number of constraints =', solver.NumConstraints())# The value of each variable in the solution.print('Solution:')print('x = ', x.solution_value())print('y = ', y.solution_value())# The objective value of the solution.print('Optimal objective value =', opt_solution)
LinearProgrammingExample()
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from ortools.sat.python import cp_model
defSimpleSatProgram():"""Minimal CP-SAT example to showcase calling the solver."""# Creates the model.
model = cp_model.CpModel()# Creates the variables.
num_vals =3
x = model.NewIntVar(0, num_vals -1,'x')
y = model.NewIntVar(0, num_vals -1,'y')
z = model.NewIntVar(0, num_vals -1,'z')# Creates the constraints.
model.Add(x != y)# Creates a solver and solves the model.
solver = cp_model.CpSolver()
status = solver.Solve(model)if status == cp_model.FEASIBLE:print('x = %i'% solver.Value(x))print('y = %i'% solver.Value(y))print('z = %i'% solver.Value(z))
SimpleSatProgram()
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from ortools.sat.python import cp_model
classVarArraySolutionPrinter(cp_model.CpSolverSolutionCallback):"""Print intermediate solutions."""def__init__(self, variables):
cp_model.CpSolverSolutionCallback.__init__(self)
self.__variables = variables
self.__solution_count =0defon_solution_callback(self):
self.__solution_count +=1for v in self.__variables:print('%s=%i'%(v, self.Value(v)), end=' ')print()defsolution_count(self):return self.__solution_count
defSearchForAllSolutionsSampleSat():"""Showcases calling the solver to search for all solutions."""# Creates the model.
model = cp_model.CpModel()# Creates the variables.
num_vals =3
x = model.NewIntVar(0, num_vals -1,'x')
y = model.NewIntVar(0, num_vals -1,'y')
z = model.NewIntVar(0, num_vals -1,'z')# Create the constraints.
model.Add(x != y)# Create a solver and solve.
solver = cp_model.CpSolver()
solution_printer = VarArraySolutionPrinter([x, y, z])
status = solver.SearchForAllSolutions(model, solution_printer)print('Status = %s'% solver.StatusName(status))print('Number of solutions found: %i'% solution_printer.solution_count())
SearchForAllSolutionsSampleSat()
整數規劃問題
from __future__ import print_function
from ortools.linear_solver import pywraplp
defmain():# Create the mip solver with the CBC backend.
solver = pywraplp.Solver('simple_mip_program',
pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)
infinity = solver.infinity()# x and y are integer non-negative variables.
x = solver.IntVar(0.0, infinity,'x')
y = solver.IntVar(0.0, infinity,'y')print('Number of variables =', solver.NumVariables())# x + 7 * y <= 17.5.
solver.Add(x +7* y <=17.5)# x <= 3.5.
solver.Add(x <=3.5)print('Number of constraints =', solver.NumConstraints())# Maximize x + 10 * y.
solver.Maximize(x +10* y)
status = solver.Solve()if status == pywraplp.Solver.OPTIMAL:print('Solution:')print('Objective value =', solver.Objective().Value())print('x =', x.solution_value())print('y =', y.solution_value())else:print('The problem does not have an optimal solution.')print('\nAdvanced usage:')print('Problem solved in %f milliseconds'% solver.wall_time())print('Problem solved in %d iterations'% solver.iterations())print('Problem solved in %d branch-and-bound nodes'% solver.nodes())if __name__ =='__main__':
main()
from __future__ import print_function
from ortools.linear_solver import pywraplp
defcreate_data_model():"""Stores the data for the problem."""
data ={}
data['constraint_coeffs']=[[5,7,9,2,1],[18,4,-9,10,12],[4,7,3,8,5],[5,13,16,3,-7],]
data['bounds']=[250,285,211,315]
data['obj_coeffs']=[7,8,2,9,6]
data['num_vars']=5
data['num_constraints']=4return data
defmain():
data = create_data_model()# Create the mip solver with the CBC backend.
solver = pywraplp.Solver('simple_mip_program',
pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)
infinity = solver.infinity()
x ={}for j inrange(data['num_vars']):
x[j]= solver.IntVar(0, infinity,'x[%i]'% j)print('Number of variables =', solver.NumVariables())for i inrange(data['num_constraints']):
constraint = solver.RowConstraint(0, data['bounds'][i],'')for j inrange(data['num_vars']):
constraint.SetCoefficient(x[j], data['constraint_coeffs'][i][j])print('Number of constraints =', solver.NumConstraints())# In Python, you can also set the constraints as follows.# for i in range(data['num_constraints']):# constraint_expr = \# [data['constraint_coeffs'][i][j] * x[j] for j in range(data['num_vars'])]# solver.Add(sum(constraint_expr) <= data['bounds'][i])
objective = solver.Objective()for j inrange(data['num_vars']):
objective.SetCoefficient(x[j], data['obj_coeffs'][j])
objective.SetMaximization()# In Python, you can also set the objective as follows.# obj_expr = [data['obj_coeffs'][j] * x[j] for j in range(data['num_vars'])]# solver.Maximize(solver.Sum(obj_expr))
status = solver.Solve()if status == pywraplp.Solver.OPTIMAL:print('Objective value =', solver.Objective().Value())for j inrange(data['num_vars']):print(x[j].name(),' = ', x[j].solution_value())print()print('Problem solved in %f milliseconds'% solver.wall_time())print('Problem solved in %d iterations'% solver.iterations())print('Problem solved in %d branch-and-bound nodes'% solver.nodes())else:print('The problem does not have an optimal solution.')if __name__ =='__main__':
main()