Q = KernelMatrix(XX) # Q_ij = K(x_i, x_j) b = -ones(nx) # b_i = 1 (in dual) # build the constraints (y.T * x = 0.0) # 1.0*x0 + 1.0*x1 + ... - 1.0*xN = 0.0 Aeq = y Beq = array([0.]) # set the bounds lb = zeros(nx) ub = 1 * ones(nx) _b = .1 * ones(nx) # good starting value if most solved xi should be zero # build the constraints operator from mystic.symbolic import linear_symbolic, solve, simplify, \ generate_solvers as solvers, generate_constraint as constraint constrain = linear_symbolic(Aeq, Beq) #NOTE: HACK assumes a single equation of the form: '1.0*x0 + ... = 0.0\n' x0, rhs = constrain.strip().split(' = ') x0, xN = x0.split(' + ', 1) N, x0 = x0.split("*") constrain = "{x0} = ({rhs} - ({xN}))/{N}".format(x0=x0, xN=xN, N=N, rhs=rhs) #NOTE: end HACK (as mystic.symbolic.solve takes __forever__) constrain = constraint(solvers(constrain)) #constrain = constraint(solvers(solve(constrain))) from mystic import suppressed @suppressed(1e-2) def conserve(x): return constrain(x)
Subject to: x[0] + 1*x[1] <= 7 -x[0] + 2*x[1] <= 4 where: 0 <= x[0] <= inf 0 <= x[1] <= 4 """ import numpy as np import mystic.symbolic as ms import mystic.solvers as my import mystic.math as mm # generate constraints and penalty for a linear system of equations A = np.array([[1, 1], [-1, 2]]) b = np.array([7, 4]) eqns = ms.linear_symbolic(G=A, h=b) cons = ms.generate_constraint(ms.generate_solvers(ms.simplify(eqns))) pens = ms.generate_penalty(ms.generate_conditions(eqns), k=1e3) bounds = [(0., None), (0., 4.)] # get the objective def objective(x): x = np.asarray(x) return x[0]**2 + 4 * x[1]**2 - 32 * x[1] + 64 x0 = np.random.rand(2) # compare against the exact minimum xs = np.array([2., 3.])
Subject to: x[0] + 1*x[1] <= 7 -x[0] + 2*x[1] <= 4 where: 0 <= x[0] <= inf 0 <= x[1] <= 4 """ import numpy as np import mystic.symbolic as ms import mystic.solvers as my import mystic.math as mm # generate constraints and penalty for a linear system of equations A = np.array([[1, 1],[-1, 2]]) b = np.array([7,4]) eqns = ms.linear_symbolic(G=A, h=b) cons = ms.generate_constraint(ms.generate_solvers(ms.simplify(eqns))) pens = ms.generate_penalty(ms.generate_conditions(eqns), k=1e3) bounds = [(0., None), (0., 4.)] # get the objective def objective(x): x = np.asarray(x) return x[0]**2 + 4*x[1]**2 - 32*x[1] + 64 x0 = np.random.rand(2) # compare against the exact minimum xs = np.array([2., 3.]) ys = objective(xs)
Y = concatenate([y,-y]) svr_epsilon = 3 b = Y + svr_epsilon * ones(Y.size) # build the constraints (y.T * x = 0.0) # 1.0*x0 + 1.0*x1 + ... - 1.0*xN = 0.0 Aeq = concatenate([ones(nx), -ones(nx)]).reshape(1,N) Beq = array([0.]) # set the bounds lb = zeros(N) ub = zeros(N) + 0.5 # build the constraints operator from mystic.symbolic import linear_symbolic, solve, \ generate_solvers as solvers, generate_constraint as constraint constrain = linear_symbolic(Aeq,Beq) constrain = constraint(solvers(solve(constrain,target=['x0']))) from mystic import suppressed @suppressed(1e-5) def conserve(x): return constrain(x) from mystic.monitors import VerboseMonitor mon = VerboseMonitor(10) # solve for alpha from mystic.solvers import diffev alpha = diffev(objective, list(zip(lb,.1*ub)), args=(Q,b), npop=N*3, gtol=200, \ itermon=mon, \ ftol=1e-5, bounds=list(zip(lb,ub)), constraints=conserve, disp=1)
# profit def fixnet(net): def profit(x): return sum(xi * pi for xi, pi in zip(x, net)) return profit profit = fixnet([i.net for i in items]) # item constraints load = [i.mass for i in items] invest = [i.buy for i in items] constraints = ms.linear_symbolic(G=[load, invest], h=[max_load, max_spend]) # bounds (on x) bounds = [(0, i.limit) for i in items] # bounds constraints lo = 'x%s >= %s' lo = '\n'.join(lo % (i, str(float(j[0])).lstrip('0')) for (i, j) in enumerate(bounds)) hi = 'x%s <= %s' hi = '\n'.join(hi % (i, str(float(j[1])).lstrip('0')) for (i, j) in enumerate(bounds)) constraints = '\n'.join([lo, hi]).strip() + '\n' + constraints cf = ms.generate_constraint(ms.generate_solvers(ms.simplify(constraints)), join=mc.and_) pf = ms.generate_penalty(ms.generate_conditions(ms.simplify(constraints)))