def main(): # Logger path = os.path.dirname(os.path.realpath(__file__)) file = os.path.join(path, "MMA_FUNCTION.log") logger = setup_logger(file) logger.info("Started\n") # Set numpy print options np.set_printoptions(precision=4, formatter={'float': '{: 0.4f}'.format}) # Initial settings m = 1 n = 1 epsimin = 0.0000001 eeen = np.ones((n, 1)) eeem = np.ones((m, 1)) zeron = np.zeros((n, 1)) zerom = np.zeros((m, 1)) xval = 1 * eeen xold1 = xval.copy() xold2 = xval.copy() xmin = eeen.copy() xmax = 100 * eeen low = xmin.copy() upp = xmax.copy() move = 1.0 c = 1000 * eeem d = eeem.copy() a0 = 1 a = zerom.copy() outeriter = 0 maxoutit = 20 kkttol = 0 # Calculate function values and gradients of the objective and constraints functions if outeriter == 0: f0val, df0dx, fval, dfdx = funct(xval, n, eeen, zeron) innerit = 0 outvector1 = np.array([outeriter, innerit, f0val, fval]) outvector2 = xval.flatten() # Log logger.info("outvector1 = {}".format(outvector1)) logger.info("outvector2 = {}\n".format(outvector2)) # The iterations starts kktnorm = kkttol + 10 outit = 0 while (kktnorm > kkttol) and (outit < maxoutit): outit += 1 outeriter += 1 # The MMA subproblem is solved at the point xval: xmma,ymma,zmma,lam,xsi,eta,mu,zet,s,low,upp = \ mmasub(m,n,outeriter,xval,xmin,xmax,xold1,xold2,f0val,df0dx,fval,dfdx,low,upp,a0,a,c,d,move) # Some vectors are updated: xold2 = xold1.copy() xold1 = xval.copy() xval = xmma.copy() # Re-calculate function values and gradients of the objective and constraints functions f0val, df0dx, fval, dfdx = funct(xval, n, eeen, zeron) # The residual vector of the KKT conditions is calculated residu,kktnorm,residumax = \ kktcheck(m,n,xmma,ymma,zmma,lam,xsi,eta,mu,zet,s,xmin,xmax,df0dx,fval,dfdx,a0,a,c,d) outvector1 = np.array([outeriter, innerit, f0val, fval]) outvector2 = xval.flatten() # Log logger.info("outvector1 = {}".format(outvector1)) logger.info("outvector2 = {}".format(outvector2)) logger.info("kktnorm = {}\n".format(kktnorm)) # Final log logger.info(" Finished")
def main(): # Logger path = os.path.dirname(os.path.realpath(__file__)) file = os.path.join(path, "GCMMA_BEAM.log") logger = setup_logger(file) logger.info("Started\n") # Set numpy print options np.set_printoptions(precision=4, formatter={'float': '{: 0.4f}'.format}) # Beam initial settings m = 1 n = 5 epsimin = 0.0000001 eeen = np.ones((n, 1)) eeem = np.ones((m, 1)) zeron = np.zeros((n, 1)) zerom = np.zeros((m, 1)) xval = 5 * eeen xold1 = xval.copy() xold2 = xval.copy() xmin = eeen.copy() xmax = 10 * eeen low = xmin.copy() upp = xmax.copy() c = 1000 * eeem d = eeem.copy() a0 = 1 a = zerom.copy() raa0 = 0.01 raa = 0.01 * eeem raa0eps = 0.000001 raaeps = 0.000001 * eeem outeriter = 0 maxoutit = 20 kkttol = 0 # Calculate function values and gradients of the objective and constraints functions if outeriter == 0: f0val, df0dx, fval, dfdx = beam2(xval) innerit = 0 outvector1 = np.array([outeriter, innerit, f0val, fval]) outvector2 = xval.flatten() # Log logger.info("outvector1 = {}".format(outvector1)) logger.info("outvector2 = {}\n".format(outvector2)) # The iterations starts kktnorm = kkttol + 10 outit = 0 while (kktnorm > kkttol) and (outit < maxoutit): outit += 1 outeriter += 1 # The parameters low, upp, raa0 and raa are calculated: low,upp,raa0,raa= \ asymp(outeriter,n,xval,xold1,xold2,xmin,xmax,low,upp,raa0,raa,raa0eps,raaeps,df0dx,dfdx) # The MMA subproblem is solved at the point xval: xmma,ymma,zmma,lam,xsi,eta,mu,zet,s,f0app,fapp= \ gcmmasub(m,n,iter,epsimin,xval,xmin,xmax,low,upp,raa0,raa,f0val,df0dx,fval,dfdx,a0,a,c,d) # The user should now calculate function values (no gradients) of the objective- and constraint # functions at the point xmma ( = the optimal solution of the subproblem). f0valnew, fvalnew = beam1(xmma) # It is checked if the approximations are conservative: conserv = concheck(m, epsimin, f0app, f0valnew, fapp, fvalnew) # While the approximations are non-conservative (conserv=0), repeated inner iterations are made: innerit = 0 if conserv == 0: while conserv == 0 and innerit <= 15: innerit += 1 # New values on the parameters raa0 and raa are calculated: raa0,raa = raaupdate(xmma,xval,xmin,xmax,low,upp,f0valnew,fvalnew,f0app,fapp,raa0, \ raa,raa0eps,raaeps,epsimin) # The GCMMA subproblem is solved with these new raa0 and raa: xmma,ymma,zmma,lam,xsi,eta,mu,zet,s,f0app,fapp = gcmmasub(m,n,iter,epsimin,xval,xmin, \ xmax,low,upp,raa0,raa,f0val,df0dx,fval,dfdx,a0,a,c,d) # The user should now calculate function values (no gradients) of the objective- and # constraint functions at the point xmma ( = the optimal solution of the subproblem). f0valnew, fvalnew = beam1(xmma) # It is checked if the approximations have become conservative: conserv = concheck(m, epsimin, f0app, f0valnew, fapp, fvalnew) # Some vectors are updated: xold2 = xold1.copy() xold1 = xval.copy() xval = xmma.copy() # Re-calculate function values and gradients of the objective and constraints functions f0val, df0dx, fval, dfdx = beam2(xval) # The residual vector of the KKT conditions is calculated residu,kktnorm,residumax = \ kktcheck(m,n,xmma,ymma,zmma,lam,xsi,eta,mu,zet,s,xmin,xmax,df0dx,fval,dfdx,a0,a,c,d) outvector1 = np.array([outeriter, innerit, f0val, fval]) outvector2 = xval.flatten() # Log logger.info("outvector1 = {}".format(outvector1)) logger.info("outvector2 = {}".format(outvector2)) logger.info("kktnorm = {}\n".format(kktnorm)) # Final log logger.info("Finished")