def main(): # instantiate dynamics dyn = Dynamics() # instantiate leg leg = Leg(dyn, alpha=0, bound=True) # set boudaries t0 = 0 s0 = np.array([1000, 1000, *np.random.randn(4)], dtype=float) l0 = np.random.randn(len(s0)) tf = 1000 sf = np.zeros(len(s0)) leg.set(t0, s0, l0, tf, sf) # define problem udp = Problem(leg, atol=1e-8, rtol=1e-8) prob = pg.problem(udp) # instantiate algorithm uda = pg7.snopt7(True, "/usr/lib/libsnopt7_c.so") uda.set_integer_option("Major iterations limit", 4000) uda.set_integer_option("Iterations limit", 40000) uda.set_numeric_option("Major optimality tolerance", 1e-2) uda.set_numeric_option("Major feasibility tolerance", 1e-4) algo = pg.algorithm(uda) # instantiate population with one chromosome pop = pg.population(prob, 1) #pop = pg.population(prob, 0) #pop.push_back([1000, *l0]) # optimise pop = algo.evolve(pop)
def algo_factory(name, original_screen_output=True): if name == "slsqp": uda = pg.nlopt('slsqp') uda.xtol_rel = 1e-5 uda.ftol_rel = 0 algo = pg.algorithm(uda) algo.set_verbosity(1) return algo elif name == "ipopt": if original_screen_output: pl = 5 else: pl = 0 # Disable lint check on next line. Known issue (pagmo2/issues/261) uda = pg.ipopt() # pylint: disable=no-member uda.set_integer_option("print_level", pl) uda.set_integer_option("acceptable_iter", 4) uda.set_integer_option("max_iter", 150) uda.set_numeric_option("tol", 1e-8) uda.set_numeric_option("dual_inf_tol", 1e-8) uda.set_numeric_option("constr_viol_tol", 1e-8) uda.set_numeric_option("compl_inf_tol", 1e-8) uda.set_numeric_option("acceptable_tol", 1e-3) uda.set_numeric_option("acceptable_dual_inf_tol", 1e-2) uda.set_numeric_option("acceptable_constr_viol_tol", 1e-6) uda.set_numeric_option("acceptable_compl_inf_tol", 1e-6) algo = pg.algorithm(uda) return algo elif name == "snopt7": import pygmo_plugins_nonfree as pg7 uda = pg7.snopt7(original_screen_output, "/usr/local/lib/libsnopt7_c.so") uda.set_integer_option("Major iterations limit", 2000) uda.set_integer_option("Iterations limit", 200000) uda.set_numeric_option("Major optimality tolerance", 1e-2) uda.set_numeric_option("Major feasibility tolerance", 1e-9) algo = pg.algorithm(uda) return algo
def algo_factory(name, original_screen_output=True): if name is "slsqp": uda = pg.nlopt('slsqp') uda.xtol_rel = 1e-5 uda.ftol_rel = 0 algo = pg.algorithm(uda) algo.set_verbosity(1) return algo elif name is "ipopt": if original_screen_output: pl = 5 else: pl = 0 uda = pg.ipopt() uda.set_integer_option("print_level", pl) uda.set_integer_option("acceptable_iter", 4) uda.set_integer_option("max_iter", 150) uda.set_numeric_option("tol", 1e-8) uda.set_numeric_option("dual_inf_tol", 1e-8) uda.set_numeric_option("constr_viol_tol", 1e-8) uda.set_numeric_option("compl_inf_tol", 1e-8) uda.set_numeric_option("acceptable_tol", 1e-3) uda.set_numeric_option("acceptable_dual_inf_tol", 1e-2) uda.set_numeric_option("acceptable_constr_viol_tol", 1e-6) uda.set_numeric_option("acceptable_compl_inf_tol", 1e-6) algo = pg.algorithm(uda) return algo elif name is "snopt7": import pygmo_plugins_nonfree as pg7 uda = pg7.snopt7(original_screen_output, "/usr/local/lib/libsnopt7_c.so") uda.set_integer_option("Major iterations limit", 2000) uda.set_integer_option("Iterations limit", 200000) uda.set_numeric_option("Major optimality tolerance", 1e-2) uda.set_numeric_option("Major feasibility tolerance", 1e-9) algo = pg.algorithm(uda) return algo
import pygmo as pg import pygmo_plugins_nonfree as ppn # 1 - Instantiate a pygmo problem constructing it from a UDP # (user defined problem). prob = pg.problem(pg.schwefel(30)) # 2 - Instantiate a pagmo_plugins_nonfree algorithm, in this case SNOPT. # Here we assume the library name is libsnopt7_c.so, in Windows it would probably be # snopt7_c.dll or similar. algo = pg.algorithm(ppn.snopt7(false, "/usr/local/lib/libsnopt7_c.so")) # 3 - Instantiate an archipelago with 16 islands having each 20 individuals archi = pg.archipelago(16, algo=algo, prob=prob, pop_size=20) # 4 - Run the evolution in parallel on the 16 separate islands 10 times. archi.evolve(10) # 5 - Wait for the evolutions to be finished archi.wait() # 6 - Print the fitness of the best solution in each island res = [isl.get_population().champion_f for isl in archi] print(res)