Форум сайта python.su
При попытке передать дополнительные аргументы в минимизируемую функцию происходит ошибка сегментирования.
#!/usr/bin/env python # -*- coding: utf-8 -*- from pyOpt import Optimization from pyOpt import NSGA2 from pyOpt import SLSQP b0 = 1.1 def objfunc2(x, b = (b0)): b1 = b[0] f = (x[0]**2 - b1)**2 + 4.*x[1]**2 g = 1.; fail = 0 return f, g, fail opt_prob = Optimization('simpe quadric', objfunc2) x = [0.0]*2; xa = [-3.]*2; xb = [3.]*2 opt_prob.addVarGroup('x', 2, type = 'c', lower=xa, upper=xb, value=x) opt_prob.addObj('f') print "\nopt_prob:" print opt_prob # Global Optimization nsga2 = NSGA2() print '-------------' nsga2(opt_prob) print "========================================================================\nopt_prob.solution(0):" print opt_prob.solution(0)
Отредактировано alien308 (Янв. 7, 2018 21:27:46)
Офлайн
Нашёл в примерах. Надо так:
#!/usr/bin/env python # -*- coding: utf-8 -*- from pyOpt import Optimization from pyOpt import NSGA2 from pyOpt import SLSQP b0 = 1.1 def objfunc2(x, **kwargs): b1 = kwargs['b'] f = (x[0]**2 - b1)**2 + 4.*x[1]**2 g = 1.; fail = 0 return f, g, fail opt_prob = Optimization('simpe quadric', objfunc2) x = [0.0]*2; xa = [-3.]*2; xb = [3.]*2 opt_prob.addVarGroup('x', 2, type = 'c', lower=xa, upper=xb, value=x) opt_prob.addObj('f') print "\nopt_prob:" print opt_prob # Global Optimization nsga2 = NSGA2() print '-------------' nsga2(opt_prob, b = b0) print "========================================================================\nopt_prob.solution(0):" print opt_prob.solution(0)
Офлайн