[SciPy-User] quadratic programming with fmin_slsqp
josef.pktd@gmai...
josef.pktd@gmai...
Fri Mar 16 11:45:33 CDT 2012
scipy is missing a fmin_quadprog
http://en.wikipedia.org/wiki/Quadratic_programming#Problem_formulation
Did anyone ever try to see if fmin_slsqp can be used for this?
It looks flexible and targeted enough to be the base for a quadratic
programming wrapper.
So far I only got a quick experiment
Josef
------
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 15 20:25:27 2012
Author: Josef Perktold
just a first try
write a function fmin_quadprog(func, A,B,C,b,c)
max xAx
st Bx = b
Cx >= c
check if there is a standard notation for Matrices
http://en.wikipedia.org/wiki/Quadratic_programming#Problem_formulation
can work with f_eqcons and f_ieqcons
I'm not sure how good the checking is
I thought I had f_ieqcons that conflicted with eqcons, but got
normal successful convergence. f_ineqcons was binding but didn't satisfy eqcons
If f_ieqcons is defined, then ieqcons is ignored. see docstring
"""
from time import time
import numpy as np
from scipy.optimize import fmin_slsqp
def func(x, args):
A = np.eye(len(x))
A[0,0] = 2
x = np.atleast_2d(x)
return np.dot(np.dot(x,A), x.T)
#fprime=testfunc_deriv
B = np.eye(2)[0]
b = np.ones(2)[0]
f_ieqcons = lambda x, *args: np.atleast_1d(np.dot(x, B) - b)
t0 = time()
xres = fmin_slsqp(func,[2.0,1.0], args=(-1.0,),
eqcons=[lambda x, args: x[0]+x[1] + 4 ],
# ieqcons=[lambda x, args: x[0]+.5,
# lambda x, args: x[0]],
f_ieqcons=f_ieqcons,
iprint=2, full_output=1)
print "Elapsed time:", 1000*(time()-t0), "ms"
print "Results",xres
print "\n\n"
---
More information about the SciPy-User
mailing list