Exemple #1
0
def optimize(k, w1, w2):
    
    # Physical problem
    rho = 0.2836  # lb/in^3
    L   = 5.0     # in
    P   = 25000.0 # lb
    E   = 30.0e6  # psi
    ys  = 36260.0 # psi
    fs  = 1.5
    dtruss = TwoBarTruss(rho, L, P, E, ys, fs)
    struss = StochasticTwoBarTruss(dtruss)

    # Optimization Problem
    optproblem = TwoBarTrussOpt(MPI.COMM_WORLD, struss, k, w1, w2)
    opt_prob = Optimization(args.logfile, optproblem.evalObjCon)
    
    # Add functions
    opt_prob.addObj('weight')
    opt_prob.addCon('buckling-bar1', type='i')
    opt_prob.addCon('failure-bar1' , type='i')
    opt_prob.addCon('failure-bar2' , type='i')
    
    # Add variables
    opt_prob.addVar('area-1', type='c', value= 1.5, lower= 1.5, upper= 1.5)
    opt_prob.addVar('area-2', type='c', value= 1.5, lower= 1.5, upper= 1.5)
    opt_prob.addVar('height', type='c', value= 4.0, lower= 4.0, upper= 10.0)
    
    # Optimization algorithm
    if args.algorithm == 'ALGENCAN':
        opt = ALGENCAN()
        opt.setOption('iprint',2)
        opt.setOption('epsfeas',1e-6)
        opt.setOption('epsopt',1e-6)
    else:
        opt = SLSQP(pll_type='POA')
        opt.setOption('MAXIT',999)
    
    opt(opt_prob,
        sens_type=optproblem.evalObjConGradient,
        disp_opts=True,
        store_hst=True,
        hot_start=False)
    
    if optproblem.comm.Get_rank() ==0:   
        print opt_prob.solution(0)
        opt_prob.write2file(disp_sols=True)
        x = optproblem.x_hist[-1]
        f = optproblem.fvals[0]
        print 'x', x
        print 'f', f

    return x, f
    # Add functions
    opt_prob.addObj('weight')
    opt_prob.addCon('buckling-bar1', type='i')
    opt_prob.addCon('failure-bar1', type='i')
    opt_prob.addCon('failure-bar2', type='i')

    # Add variables
    opt_prob.addVar('area-1', type='c', value=1.0, lower=1.0e-3, upper=2.0)
    opt_prob.addVar('area-2', type='c', value=1.0, lower=1.0e-3, upper=2.0)
    opt_prob.addVar('height', type='c', value=4.0, lower=4.0, upper=10.0)

    # Optimization algorithm
    if args.algorithm == 'ALGENCAN':
        opt = ALGENCAN()
        opt.setOption('iprint', 2)
        opt.setOption('epsfeas', 1e-6)
        opt.setOption('epsopt', 1e-6)
    else:
        opt = SLSQP(pll_type='POA')
        opt.setOption('MAXIT', 999)

    opt(opt_prob,
        sens_type=optproblem.evalObjConGradient,
        disp_opts=True,
        store_hst=True,
        hot_start=False)

    if optproblem.comm.Get_rank() == 0:
        print opt_prob.solution(0)
        opt_prob.write2file(disp_sols=True)