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)