def optimize(cost,lb,ub): from mystic.differential_evolution import DifferentialEvolutionSolver2 from mystic.termination import CandidateRelativeTolerance as CRT from mystic.strategy import Best1Exp from mystic import getch, random_seed, VerboseSow, Sow random_seed(123) stepmon = VerboseSow(100) #stepmon = Sow() evalmon = Sow() ndim = len(lb) # [(1 + RVend) - RVstart] + 1 solver = DifferentialEvolutionSolver2(ndim,npop) solver.SetRandomInitialPoints(min=lb,max=ub) solver.SetStrictRanges(min=lb,max=ub) solver.SetEvaluationLimits(maxiter,maxfun) tol = convergence_tol solver.Solve(cost,termination=CRT(tol,tol),strategy=Best1Exp, \ CrossProbability=crossover,ScalingFactor=percent_change, \ StepMonitor=stepmon, EvaluationMonitor=evalmon) print "solved: %s" % solver.Solution() fitness = solver.bestEnergy / scale #XXX: scale != 0 func_evals = len(evalmon.y) return fitness, func_evals
def optimize(cost, lb, ub): from mystic.differential_evolution import DifferentialEvolutionSolver2 from mystic.termination import CandidateRelativeTolerance as CRT from mystic.strategy import Best1Exp from mystic import getch, random_seed, VerboseSow, Sow random_seed(123) stepmon = VerboseSow(100) #stepmon = Sow() evalmon = Sow() ndim = len(lb) # [(1 + RVend) - RVstart] + 1 solver = DifferentialEvolutionSolver2(ndim, npop) solver.SetRandomInitialPoints(min=lb, max=ub) solver.SetStrictRanges(min=lb, max=ub) solver.SetEvaluationLimits(maxiter, maxfun) tol = convergence_tol solver.Solve(cost,termination=CRT(tol,tol),strategy=Best1Exp, \ CrossProbability=crossover,ScalingFactor=percent_change, \ StepMonitor=stepmon, EvaluationMonitor=evalmon) print "solved: %s" % solver.Solution() fitness = solver.bestEnergy / scale #XXX: scale != 0 func_evals = len(evalmon.y) return fitness, func_evals
Use a linear regression to fit sparse data generated from: f(x) = a*x3**3 + b*x2**2 + c*x1 + d*x0 a,b,c,d = 0.661, -1.234, 2.983, -16.5571 Where the following information is utilized: f(x) is a polynomial of order=3 3*b + c > -0.75 4.5*b - d > 11.0 """ import numpy as np from sklearn import preprocessing as pre from sklearn import linear_model as lin from mystic.symbolic import generate_constraint, generate_solvers, simplify from mystic.constraints import vectorize from mystic import random_seed random_seed(123) # define a model a, b, c, d = 0.661, -1.234, 2.983, -16.5571 def model(x): x0, x1, x2, x3 = x return a * x3**3 + b * x2**2 + c * x1 + d * x0 # generate some sparse data xtrain = np.random.uniform(0, 100, size=(10, 4)) target = model(xtrain.T).T xtest = np.random.uniform(0, 100, size=(10, 4)) test = model(xtest.T).T
#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2019-2021 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/mystic/blob/master/LICENSE from mystic.symbolic import denominator, _solve_zeros, equals, simplify, flip from mystic import random_seed random_seed(123) #FIXME: should be commented out var = list('BC') eqn = 'A = (B + 1/C)/(B*C/tan(B))' assert set(denominator(eqn, var)) == set(['C', 'tan(B)', '(B*C/tan(B))']) eqn = 'A = 1/B + 1/(C + B*(B - 2))' assert set(denominator(eqn, var)) == set(['B', '(C + B*(B - 2))']) eqn = 'A = 1/B + 1/tan(B*C)' assert set(denominator(eqn, var)) == set(['B', 'tan(B*C)']) eqn = 'A = B - 3/(B-2)**2 - 1/(B+C)' assert set(denominator(eqn, var)) == set(['(B-2)**2', '(B+C)']) eqn = 'A = (B + 2)/C' assert denominator(eqn, var) == ['C'] eqn = 'A = B/(C - 2)' assert denominator(eqn, var) == ['(C - 2)'] eqn = 'A = (B*C/tan(B))' assert denominator(eqn, var) == ['tan(B)'] eqn = 'A = (1 + 1/C)' assert denominator(eqn, var) == ['C'] eqn = 'A = 4/(C*B)' assert denominator(eqn, var) == ['(C*B)']
x_ = constraint(x) # print("target: %s, %s, %s" % (x1, x2, x3)) # print("solved: %s, %s, %s" % (f1(x_), f2(x_), f3(x_))) assert round(f1(x_)) == round(x1) assert round(f2(x_)) == round(x2) assert round(f3(x_)) == round(x3) # case #2: couple constraints into a single constraint from mystic.math.measures import impose_product, impose_sum, impose_mean from mystic.constraints import as_penalty from mystic import random_seed random_seed(123) t = t1,t2,t3 = (impose_sum, impose_product, impose_mean) #c = [lambda x: ti(xi, x) for (xi,ti) in zip(x,t)] #XXX c1 = lambda x: t1(x1, x) c2 = lambda x: t2(x2, x) c3 = lambda x: t3(x3, x) c = (c1,c2,c3) k=1 solver = 'buckshot' #'diffev' ptype = linear_equality #quadratic_equality p = [as_penalty(ci, ptype) for ci in c] penalty = and_(*p, k=k) constraint = as_constraint(penalty, solver=solver)
from mystic.symbolic import denominator, _solve_zeros, equals, simplify, flip from mystic import random_seed random_seed(123) #FIXME: should be commented out var = list('BC') eqn = 'A = (B + 1/C)/(B*C/tan(B))' assert set(denominator(eqn, var)) == set(['C', 'tan(B)', '(B*C/tan(B))']) eqn = 'A = 1/B + 1/(C + B*(B - 2))' assert set(denominator(eqn , var)) == set(['B', '(C + B*(B - 2))']) eqn = 'A = 1/B + 1/tan(B*C)' assert set(denominator(eqn , var)) == set(['B', 'tan(B*C)']) eqn = 'A = B - 3/(B-2)**2 - 1/(B+C)' assert set(denominator(eqn , var)) == set(['(B-2)**2', '(B+C)']) eqn = 'A = (B + 2)/C' assert denominator(eqn , var) == ['C'] eqn = 'A = B/(C - 2)' assert denominator(eqn , var) == ['(C - 2)'] eqn = 'A = (B*C/tan(B))' assert denominator(eqn , var) == ['tan(B)'] eqn = 'A = (1 + 1/C)' assert denominator(eqn , var) == ['C'] eqn = 'A = 4/(C*B)' assert denominator(eqn , var) == ['(C*B)'] eqn = 'A = C*B' assert denominator(eqn , var) == [] eqn = 'A = (B - 1/C)/(1 - (B*C))' assert set(_solve_zeros(eqn, var)) == set(['C = 0', 'B = 1/C']) eqn = 'A = (B - 1/C)/(1 - sin(B*C))' assert set(_solve_zeros(eqn, var)) == set(['C = 0', '(1 - sin(B*C)) = 0'])