Python
Es un lenguaje de programación de alto nivel. Python fue creado a finales de los ochenta por Guido Van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países Bajos, como un sucesor del lenguaje de programación ABC.
¿Por qué usar Python?
Es un lenguaje de programación de alto nivel. Python fue creado a finales de los ochenta por Guido Van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países Bajos, como un sucesor del lenguaje de programación ABC.
¿Por qué usar Python?
Por que es facil de usar, es de código abierto
Ejemplos de python
Un ejemplo sencillo de como generar números aleatorios y guardarlos en un archivo. También un ejemplo de como trabajar con importat gnuplot en python.
Ejemplos de python
Un ejemplo sencillo de como generar números aleatorios y guardarlos en un archivo. También un ejemplo de como trabajar con importat gnuplot en python.
#!/usr/bin/python
import random
import Gnuplot
f = open("archivo.txt","w")
for i in range(0, 10):
a=random.uniform(1,1000)
f.write("%fl\n" %a)
print(a)
f.close()
b=[[1,2],[3,4],[5,6],]
gp = Gnuplot.Gnuplot(persist=1)
gp.title('Grafica sencilla ')
gp.xlabel('primera entrada')
gp.ylabel('segunda entrada')
gp.plot(b)
Un ejemplo de como ingresar datos desde teclado y como poner mensajes de error
valor=input('Dame un numero: ')
try:
temp=int(valor)
print 'el valor es: ', valor
except ValueError as variable:
print 'Debes ingresar un numero entero'
Python y Cplex
Es posible trabajar con Cplex desde pyhton en el enlace
se puede encontrar todo la información y de como trabajar con python y Cplex.
A continuación se presenta un demo
#!/usr/bin/python
# diet.py -- A diet problem
# Descripción del problema
# Minimizar el costo de la dieta sujeto a las restricciones de los nutrientes.
# To run from within the python interpreter, use
# >>> import diet
import cplex
from cplex.exceptions import CplexError
from inputdata import read_dat_file
# Clase para los datos
class ProbData:
def __init__(self, filename):
# lee los datos del archivo diet.dat
self.foodCost, self.foodMin, self.foodMax, self.nutrMin, \
self.nutrMax, self.nutrPer = \
read_dat_file("../../data/diet.dat")
# revisa si los datos no son inconsistentes
if len(self.foodCost) != len(self.foodMin) or \
len(self.foodCost) != len(self.foodMax) or \
len(self.nutrMin) != len(self.nutrMax) or \
len(self.nutrMin) != len(self.nutrPer):
print "ERROR: Data file '%s' contains inconsistent data\n" % filename
raise Exception("data file error")
for np in self.nutrPer:
if len(self.foodCost) != len(np):
print "ERROR: Data file '%s' contains inconsistent data\n" % filename
raise Exception("data file error")
def populatebyrow(prob, data):
nFoods = len(data.foodCost)
nNutrients = len(data.nutrMin)
# we want to minimize costs
prob.objective.set_sense(prob.objective.sense.minimize)
# add variables to decide how much of each type of food to buy
varnames = ["x"+str(j) for j in range(nFoods)]
prob.variables.add(obj = data.foodCost,
lb = data.foodMin,
ub = data.foodMax,
names = varnames)
# add constraints to specify limits for each of the nutrients
for n in range(nNutrients):
prob.linear_constraints.add(lin_expr = [[varnames,data.nutrPer[n]]],
senses = ["R"],
rhs = [data.nutrMin[n]],
range_values = [data.nutrMax[n] - data.nutrMin[n]])
def populatebycolumn(prob, data):
nFoods = len(data.foodCost)
nNutrients = len(data.nutrMin)
# we want to minimize costs
prob.objective.set_sense(prob.objective.sense.minimize)
# create empty constraints to be filled later
rownames = ["r"+str(n) for n in range(nNutrients)]
prob.linear_constraints.add(senses = ["R" * nNutrients],
rhs = data.nutrMin,
range_values = [data.nutrMax[n] - data.nutrMin[n]
for n in range(nNutrients)],
names = rownames)
# create columns
for j in range(nFoods):
prob.variables.add(obj = [data.foodCost[j]],
lb = [data.foodMin[j]],
ub = [data.foodMax[j]],
columns = [[rownames, [data.nutrPer[n][j]
for n in range(nNutrients)]]])
def diet(pop_method):
try:
# read the data in diet.dat
data = ProbData("../../data/diet.dat")
# create CPLEX object
my_prob = cplex.Cplex()
# populate problem
if pop_method == "r":
handle = populatebyrow(my_prob, data)
if pop_method == "c":
handle = populatebycolumn(my_prob, data)
# solve problem
my_prob.solve()
except CplexError, exc:
print exc
return
numrows = my_prob.linear_constraints.get_num()
numcols = my_prob.variables.get_num()
solution = my_prob.solution
# solution.get_status() returns an integer code
print "Solution status = " , solution.get_status(), ":",
# the following line prints the corresponding string
print solution.status[solution.get_status()]
print "Objective value = " , solution.get_objective_value()
x = solution.get_values(0, my_prob.variables.get_num()-1)
for j in range(my_prob.variables.get_num()):
print "Buy %d = %17.10g" % (j, x[j])
import sys
if __name__ == "__main__":
if len(sys.argv) != 2 or sys.argv[1] not in ["-r", "-c"]:
print "Usage: diet.py -X"
print " where X is one of the following options:"
print " r generate problem by row"
print " c generate problem by column"
print " Exiting..."
sys.exit(-1)
diet(sys.argv[1][1])
else:
prompt = """Enter the letter indicating how the problem data should be populated:
r : populate by rows
c : populate by columns\n ? > """
r = 'r'
c = 'c'
diet(input(prompt))
Referencias
Introducción modelo_simple

