from mystic.symbolic import generate_constraint, generate_solvers, solve from mystic.symbolic import generate_penalty, generate_conditions equations = """ x0**2 - x1 + 1.0 <= 0.0 1.0 - x0 + (x1 - 4)**2 <= 0.0 """ #cf = generate_constraint(generate_solvers(solve(equations))) #XXX: inequalities pf = generate_penalty(generate_conditions(equations), k=1e12) from mystic.constraints import as_constraint cf = as_constraint(pf) if __name__ == '__main__': from mystic.solvers import buckshot from mystic.math import almostEqual result = buckshot(objective, 2, 40, bounds=bounds, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF
from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ x2 - x3 - 0.55 <= 0.0 x3 - x2 - 0.55 <= 0.0 abs(1000*(sin(-x2-.25) + sin(-x3-0.25)) + 894.8 - x0) = 0.0 abs(1000*(sin(x2-.25) + sin(x2-x3-0.25)) + 894.8 - x1) = 0.0 abs(1000*(sin(x3-.25) + sin(x3-x2-0.25)) + 1294.8) = 0.0 """ #cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import buckshot from mystic.math import almostEqual result = buckshot(objective, len(xs), npts=100, bounds=bounds, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-1) assert almostEqual(result[1], ys, rel=1e-1) # EOF
def penalty2(x): # <= 0.0 return 1.0 - x[0] + (x[1] - 4)**2 @quadratic_inequality(penalty1, k=1e12) @quadratic_inequality(penalty2, k=1e12) def penalty(x): return 0.0 solver = as_constraint(penalty) if __name__ == '__main__': from mystic.solvers import buckshot from mystic.math import almostEqual result = buckshot(objective, 2, 40, bounds=bounds, penalty=penalty, disp=False, full_output=True) assert almostEqual(result[0], xs, tol=1e-2) assert almostEqual(result[1], ys, rel=1e-2) # EOF
ys = 5126.49810960 from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.symbolic import generate_penalty, generate_conditions equations = """ x2 - x3 - 0.55 <= 0.0 x3 - x2 - 0.55 <= 0.0 abs(1000*(sin(-x2-.25) + sin(-x3-0.25)) + 894.8 - x0) = 0.0 abs(1000*(sin(x2-.25) + sin(x2-x3-0.25)) + 894.8 - x1) = 0.0 abs(1000*(sin(x3-.25) + sin(x3-x2-0.25)) + 1294.8) = 0.0 """ #cf = generate_constraint(generate_solvers(simplify(equations))) pf = generate_penalty(generate_conditions(equations), k=1e12) if __name__ == '__main__': from mystic.solvers import buckshot from mystic.math import almostEqual result = buckshot(objective, len(xs), npts=100, bounds=bounds, penalty=pf, disp=False, full_output=True) assert almostEqual(result[0], xs, rel=1e-1) assert almostEqual(result[1], ys, rel=1e-1) # EOF