2017-01-17 18 views
1

У меня есть ошибка, которую я не могу решить. Может кто-то помочь мне с этим? Вот мой код.MDO тестовый комплект сжигание пропана

Заранее спасибо

from openmdao.main.api import Assembly, set_as_top 
from openmdao.lib.drivers.api import SLSQPdriver 
from openmdao.lib.optproblems import PropaneDisciplines 

class PropIDF(Assembly): 

    def configure(self): 

     # create Optimizer instance 
     self.add('driver', SLSQPdriver()) 

     # Disciplines 
     self.add('dis1', PropaneDisciplines.PropDiscipline1()) 
     self.add('dis2', PropaneDisciplines.PropDiscipline2()) 
     self.add('dis3', PropaneDisciplines.PropDiscipline3()) 

     # Driver process definition 
     self.driver.workflow.add(['dis1', 'dis2', 'dis3']) 


     # Optimization parameters 
     self.driver.add_objective('(dis1.z1)*2+ dis1.y13+ dis1.y123+ dis1.z4+ dis2.y2+ dis3.y3+ (dis2.y23)*2- 10 +\ 
           (abs(dis1.y13 * dis1.y123)**0.5) - (abs((40 * dis1.z1/ dis3.y32)**0.5))*dis1.z3 +\ 
           (abs(dis1.y13 * dis1.z1)**0.5) - (abs((40 * dis1.y123/ dis3.y32)**0.5))*dis1.z4 +\ 
           (dis1.z1 * (abs(dis1.z3)**0.5)) - (dis1.y123 * dis2.y2 * (abs(40/dis3.y32)**0.5))') 


     #Global Design Variables 
     self.driver.add_parameter(('dis1.z1','dis2.z1', 'dis3.z1'), low =-1e99, high=1e99) 
     self.driver.add_parameter(('dis1.z2', 'dis2.z2', 'dis3.z2'), low=-1e99, high=1e99) 
     self.driver.add_parameter(('dis1.z3', 'dis2.z3', 'dis3.z3'), low=-1e99, high=1e99) 
     self.driver.add_parameter(('dis1.z4', 'dis2.z4', 'dis3.z4'), low=-1e99, high=1e99) 

     self.driver.add_constraint('(dis1.z1)*2+ dis1.y13+ dis1.y123+ dis1.z4+ dis2.y2+ dis3.y3+ (dis2.y23)*2- 10 < 0') 
     self.driver.add_constraint('(abs(dis1.y13*dis1.y123)**0.5) -(abs((40 * dis1.z1/ dis3.y32)**0.5))*dis1.z3 <= 0') 
     self.driver.add_constraint('(abs(dis1.y13*dis1.z1)**0.5) -(abs((40 * dis1.y123/ dis3.y32)**0.5))*dis1.z4 <=0') 
     self.driver.add_constraint('(dis1.z1*(abs(dis1.z3)**0.5))-(dis1.y123*dis2.y2*(abs(40/dis3.y32)**0.5))>= 0') 

     self.driver.iprint = 0 


if __name__ == "__main__": 

    import time 

    prob = PropIDF() 

    prob.dis1.z1 = prob.dis2.z1 = prob.dis3.z1 = 2.0 
    prob.dis1.z2 = prob.dis2.z2 = prob.dis3.z2 = 2.0 
    prob.dis1.z3 = prob.dis2.z3 = prob.dis3.z3 = 2.0 
    prob.dis1.z4 = prob.dis2.z4 = prob.dis3.z4 = 2.0 
    prob.dis1.y13 = 1.0 
    prob.dis1.y123 = 1.0 
    prob.dis3.y31 = 1.0 
    prob.dis2.y2 = 1.0 
    prob.dis3.y3 = 1.0 
    prob.dis2.y23 = 1.0 
    prob.dis3.y32 = 1.0 


    tt = time.time() 
    prob.run() 

    print "\n" 
    print "Minimum found at (%f, %f, %f, %f)" % (prob.dis1.z1, \ 
             prob.dis1.z2, \ 
             prob.dis1.z3, \ 
             prob.dis1.z4) 
    print "Couping vars from discipline 1: %f, %f" % (prob.dis1.y13, prob.dis1.y123) 
    print "Coupling vars from discipline 2: %f, %f" % (prob.dis2.y2, prob.dis2.y23) 
    print "Coupling vars from discipline 2: %f, %f, %f" %(prob.dis3.y31, prob.dis3.y3, prob.dis3.y32) 
    print "Minimum objective: ", prob.driver.eval_objective() 
    print "Elapsed time: ", time.time()-tt, "seconds" 

Выход: D: \ Anaconda2 \ Scripts \ python.exe D: /OpenMDAO/Mitul/Problems/Propane_Combustion/IDF.py

Traceback (самый последний вызов последний):

File "D:/OpenMDAO/Mitul/Problems/Propane_Combustion/IDF.py", line 55, in <module> 

    prob = PropIDF() 

    File "d:\anaconda2\lib\site-packages\openmdao\main\assembly.py", line 182, in __init__ 

    set_as_top(self, first_only=True) 

    File "d:\anaconda2\lib\site-packages\openmdao\main\assembly.py", line 78, in set_as_top 

    cont.cpath_updated() 

    File "d:\anaconda2\lib\site-packages\openmdao\main\component.py", line 420, in cpath_updated 

    self.configure() 

    File "D:/OpenMDAO/Mitul/Problems/Propane_Combustion/IDF.py", line 20, in configure 

    self.add('f2', (dis1.z1)*2+ dis1.y13+ dis1.y123+ dis1.z4+ dis2.y2+ dis3.y3+ (dis2.y23)*2- 10) 

NameError: глобальное имя 'DIS1' не определен

ответ

0

, поскольку вы импортируете из openmdao.main.api, похоже, вы пытаетесь отработать ОЧЕНЬ старую версию openMDAO (< 0.13.X).

Вам необходимо обновить свой код до OpenMDAO 1.x, так как более старые версии больше не поддерживаются.

0

Я попытался установить openmdao-0.13.0, но не смог разобрать https: \ conda.binstar.org.

Когда я пытаюсь установить более низкие версии, он легко устанавливается. Есть ли что-то конкретное требование для более высокой версии?

0

У меня тоже были проблемы с Анакондой. Я бегу на коробке Fedora 25. Вместо этого мне пришлось сначала вручную установить каждую зависимость, а затем openmdao. Теперь все работает отлично, но это была тяжелая работа.

Смежные вопросы