from scipy import optimize from numpy import array, log def objective(x): return -profit(*x) def profit(p1, p2): x1 = demand1(p1, p2) x2 = demand2(p1, p2) income = x1*p1 + x2*p2 cost = costf(x1, x2) return income - cost def demand1(p1, p2): return 20*(20 - p1) def demand2(p1, p2): return 40*(40 - p2) def costf(x1, x2): c1 = 10*(x1**0.5) c2 = 20*(x2**0.5) + 2*x2 cbase = 1000 + 5*(x1 + x2) return c1 + c2 + cbase price = (optimize.fmin(objective, [1, 1])) print 'prices:', price print 'amounts:', demand1(*price), demand2(*price)