예제 #1
0
파일: test_SOW.py 프로젝트: shirangi/mystic
def test2(monitor, diffenv=None):
    if diffenv == True:
        #from mystic.solvers import DifferentialEvolutionSolver as DE
        from mystic.solvers import DifferentialEvolutionSolver2 as DE
    elif diffenv == False:
        from mystic.solvers import NelderMeadSimplexSolver as noDE
    else:
        from mystic.solvers import PowellDirectionalSolver as noDE
    from mystic.termination import ChangeOverGeneration as COG
    from mystic.tools import getch, random_seed

    random_seed(123)

    lb = [-100, -100, -100]
    ub = [1000, 1000, 1000]
    ndim = len(lb)
    npop = 5
    maxiter = 10
    maxfun = 1e+6
    convergence_tol = 1e-10
    ngen = 100
    crossover = 0.9
    percent_change = 0.9

    def cost(x):
        ax, bx, c = x
        return (ax)**2 - bx + c

    if diffenv == True:
        solver = DE(ndim, npop)
    else:
        solver = noDE(ndim)
    solver.SetRandomInitialPoints(min=lb, max=ub)
    solver.SetStrictRanges(min=lb, max=ub)
    solver.SetEvaluationLimits(maxiter, maxfun)
    solver.SetEvaluationMonitor(monitor)
    #solver.SetGenerationMonitor(monitor)

    tol = convergence_tol
    solver.Solve(cost, termination=COG(tol, ngen))

    solved = solver.Solution()
    monitor.info("solved: %s" % solved)
    func_max = -solver.bestEnergy
    return solved, func_max
예제 #2
0
파일: test_br8.py 프로젝트: datnamer/mystic
def de_solve(CF, a4=None, a5=None):
    """solve with DE for given cost funciton; fix a4 and/or a5 if provided"""
    minrange = [0, 100, 100, 1, 1]
    maxrange = [100, 2000, 200, 200, 200]
    interval = 10
    if a5 != None:
        minrange[4] = maxrange[4] = a5
        interval = 20
    if a4 != None:
        minrange[3] = maxrange[3] = a4
        if interval == 20: interval = 1000

    solver = DifferentialEvolutionSolver(ND, NP)
    solver.enable_signal_handler()
    stepmon = MyMonitor(interval)
    solver.SetRandomInitialPoints(min=minrange,max=maxrange)
    solver.SetStrictRanges(min=minrange, max=maxrange)
    solver.SetEvaluationLimits(generations=MAX_GENERATIONS)
    solver.SetGenerationMonitor(stepmon)
    solver.Solve(CF,termination=ChangeOverGeneration(generations=50))
    solution = solver.Solution()
    return solution, stepmon