Я пытаюсь изменить размер популяции GA при использовании оптимизатора NSGA2 через драйвер pyoptsparse OpenMDAO.
Я попытался получить доступ к PopSize
из pyNSGA2.py
с помощью словаря opt_settings
следующим образом:
prob.driver = om.pyOptSparseDriver(optimizer='NSGA2')
prob.driver.opt_settings["PopSize"] = 150
Однако это приводит к ошибке сегментации, сообщение ниже:
[0]PETSC ERROR: ------------------------------------------------------------------------
[0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range
[0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger
[0]PETSC ERROR: or see https://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind
[0]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS X to find memory corruption errors
[0]PETSC ERROR: configure using --with-debugging=yes, recompile, link, and run
[0]PETSC ERROR: to get more information on the crash.
--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 50152059.
NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
Есть ли другой способ доступа к параметрам оптимизатора NSGA2, который следует использовать вместо словаря opt_settings
? Я относительно новичок в Python, поэтому я также подозреваю, что мой синтаксис также может быть неправильным.
Обновление: для большего контекста я попытался запустить без PETSC. Оптимизация прошла успешно без попытки изменить PopSize
, однако произошел сбой только с Segmentation fault
при попытке изменить PopSize
. Отследите ошибку, я считаю, что источник ошибки сегментации находится в pyoptsparse/pyNSGA2/source/crossover.c
, согласно сообщению ниже
Program received signal SIGSEGV, Segmentation fault.
0x00007fffbc85747b in realcross (parent1=parent1@entry=0x1864bf0, parent2=parent2@entry=0x186d030,
child1=child1@entry=0x1868280, child2=child2@entry=0x18682c0, global=..., nrealcross=<optimized out>)
at pyoptsparse/pyNSGA2/source/crossover.c:104
104 child2->xreal[i] = parent2->xreal[i];
Я также попытался выполнить чистую установку PETSC на новой машине, однако это возвращает меня к той же ошибке.