Example #1
0
def test_LBFGS(bfgs_options, bfgs_expected, moola_problem):
    problem, x_init, options = moola_problem
    options.update(bfgs_options)
    solver = moola.BFGS(problem, x_init, options=options)
    sol = solver.solve()
    assert len(sol['lbfgs']) == min(options['mem_lim'], sol['iteration'])
    if options['gtol'] is not None:
        assert sol['grad_norm'] < options['gtol']
    if options['jtol'] is not None:
        assert sol['delta_J'] < options['jtol']
    assert sol['iteration'] in bfgs_expected
Example #2
0
def solve_moola_bfgs(rf, ctrls, optimization_parameters=None):
    if optimization_parameters is None:
        optimization_parameters = {
            'jtol': 1e-6,
            'gtol': 1e-6,
            'Hinit': "default",
            'maxiter': 100,
            'mem_lim': 10
        }

    problem = MoolaOptimizationProblem(rf)

    f_moola = moola.DolfinPrimalVectorSet(
        [moola.DolfinPrimalVector(c, inner_product="L2") for c in ctrls])

    solver = moola.BFGS(problem, f_moola, options=optimization_parameters)
    sol = solver.solve()
    opt_ctrls = sol['control'].data
    return opt_ctrls
Example #3
0
                alpha / 2 * f**2 * fa.dx)
control = da.Control(f)
rf = da.ReducedFunctional(J, control)

# set the initial value to be zero for optimization
f.vector()[:] = 0
# N = len(f.vector()[:])
# f.vector()[:] = np.random.rand(N)*2 -1

problem = da.MoolaOptimizationProblem(rf)
f_moola = moola.DolfinPrimalVector(f)
solver = moola.BFGS(problem,
                    f_moola,
                    options={
                        'jtol': 0,
                        'gtol': 1e-9,
                        'Hinit': "default",
                        'maxiter': 100,
                        'mem_lim': 10
                    })
sol = solver.solve()
f_opt = sol['control'].data

file = fa.File('f.pvd')
f_opt.rename('f', 'f')
file << f_opt

file = fa.File('g.pvd')
g.rename('g', 'g')
file << g
Example #4
0
from dolfin import *
from dolfin_adjoint import *
import moola

mesh = UnitSquareMesh(64, 64)
V = FunctionSpace(mesh, "CG", 1)
W = FunctionSpace(mesh, "CG", 1)
m = Function(W, name='Control')
u = Function(V, name='State')
v = TestFunction(V)
# Define weak problem
F = (inner(grad(u), grad(v)) - m * v) * dx
bc = DirichletBC(V, 0.0, "on_boundary")
solve(F == 0, u, bc)
# Define regularisation parameter
alpha = Constant(1e-6)
# Define desired temperature profile
x = SpatialCoordinate(mesh)
d = (1 / (2 * pi**2) + 2 * alpha * pi**2) * sin(pi * x[0]) * sin(pi * x[1])
control = SteadyParameter(m)
J = Functional((0.5 * inner(u - d, u - d)) * dx + alpha / 2 * m**2 * dx)
rf = ReducedFunctional(J, control)
# Set up moola problem and solve optimisation
problem = rf.moola_problem()
m_moola = moola.DolfinPrimalVector(m, inner_product="L2")
solver = moola.BFGS(problem, m_moola)
sol = solver.solve()