Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def gen_737_plots(sol):
"""
function to generate plots of interesting values
"""
rng = np.cumsum(mag(sol('R_{segment}')))
alt = mag(sol('hft'))
#generate an altitude profile plot
tasrng = [0, 13.68, 31.34, 59.96, 115.05, 115.05, 2875.38, 2875.38, 2906.56, 2937.74, 2968.92, 3000]
tasalt = [0, 8750, 17500, 26250, 35000, 35000, 39677.3, 39677.3, 29758., 19838.6, 9919.3, 0]
plt.plot(rng, alt)
plt.plot(tasrng, tasalt)
plt.legend(['SP Model', 'TASOPT'], loc=4, fontsize=18)
plt.ylabel('Altitude [ft]', fontsize=22)
plt.xlabel('Down Range Distance [nm]', fontsize=22)
plt.title('737 Altitude Profile', fontsize=22)
plt.tick_params(axis='both', which='major', labelsize=16)
plt.tick_params(axis='both', which='minor', labelsize=16)
plt.savefig('737_altitude_profile.eps', bbox_inches="tight")
plt.show()
has_only_one_model = False
break
if has_only_one_model:
kwargs["sortbymodel"] = False
for key in self.name_collision_varkeys():
key.descr["necessarylineage"] = True
showvars = self._parse_showvars(showvars)
strs = []
for table in tables:
if table == "cost":
cost = self["cost"] # pylint: disable=unsubscriptable-object
if kwargs.get("latex", None): # cost is not printed for latex
continue
strs += ["\n%s\n------------" % "Optimal Cost"]
if len(self) > 1:
costs = ["%-8.3g" % c for c in mag(cost[:4])]
strs += [" [ %s %s ]" % (" ".join(costs),
"..." if len(self) > 4 else "")]
else:
strs += [" %-.4g" % mag(cost)]
strs[-1] += unitstr(cost, into=" [%s]", dimless="")
strs += [""]
elif table in TABLEFNS:
strs += TABLEFNS[table](self, showvars, **kwargs)
elif table in self:
data = self[table]
if showvars:
showvars = self._parse_showvars(showvars)
data = {k: data[k] for k in showvars if k in data}
strs += var_table(data, self.table_titles[table], **kwargs)
if kwargs.get("latex", None):
preamble = "\n".join(("% \\documentclass[12pt]{article}",
def gen_plots(sol):
"""
function to generate plots of interesting values
"""
#generate an altitude profile plot
rng = np.cumsum(mag(sol('R_{segment}')))
alt = mag(sol('hft'))
plt.plot(rng, alt)
plt.ylabel('Altitude [ft]', fontsize=18)
plt.xlabel('Down Range Distance', fontsize=18)
plt.title('Aircraft Altitude Profile')
plt.show()
if model not in models:
continue
if model != oldmodel and len(models) > 1:
if oldmodel is not None:
lines.append(["", "", "", ""])
if model is not "":
if not latex:
lines.append([("modelname",), model, "", ""])
else:
lines.append([r"\multicolumn{3}{l}{\textbf{" +
model + r"}} \\"])
oldmodel = model
label = var.descr.get('label', '')
units = unitstr(var, into=" [%s] ", dimless="") if printunits else ""
if isvector:
vals = [vecfmt % v for v in mag(val).flatten()[:4]]
ellipsis = " ..." if len(val) > 4 else ""
valstr = "[ %s%s ] " % (" ".join(vals), ellipsis)
else:
valstr = valfmt % mag(val)
valstr = valstr.replace("nan", " - ")
if not latex:
lines.append([varstr, valstr, units, label])
else:
varstr = "$%s$" % varstr.replace(" : ", "")
if latex == 1: # normal results table
lines.append([varstr, valstr, "$%s$" % var.latex_unitstr(),
label])
coltitles = [title, "Value", "Units", "Description"]
elif latex == 2: # no values
lines.append([varstr, "$%s$" % var.latex_unitstr(), label])
coltitles = [title, "Units", "Description"]
def determine_unbounded_variables(self, model, solver=None, verbosity=0,
eps=1e-30, lower=None, upper=None, **kwargs):
"Returns labeled dictionary of unbounded variables."
m = self.bound_all_variables(model, eps, lower, upper)
sol = m.localsolve(solver, verbosity, **kwargs)
solhold = sol
lam = sol["sensitivities"]["la"][1:]
out = defaultdict(list)
for i, varkey in enumerate(m.bound_all["varkeys"]):
lam_gt, lam_lt = lam[2*i], lam[2*i+1]
if abs(lam_gt) >= 1e-7: # arbitrary threshold
out["sensitive to upper bound"].append(varkey)
if abs(lam_lt) >= 1e-7: # arbitrary threshold
out["sensitive to lower bound"].append(varkey)
value = mag(sol["variables"][varkey])
distance_below = np.log(value/m.bound_all["lb"])
distance_above = np.log(m.bound_all["ub"]/value)
if distance_below <= 3: # arbitrary threshold
out["value near lower bound"].append(varkey)
elif distance_above <= 3: # arbitrary threshold
out["value near upper bound"].append(varkey)
return out, solhold
def determine_unbounded_variables(self, model, solver=None, verbosity=0,
eps=1e-30, lower=None, upper=None, **kwargs):
"Returns labeled dictionary of unbounded variables."
m = self.bound_all_variables(model, eps, lower, upper)
sol = m.localsolve(solver, verbosity, **kwargs)
solhold = sol
lam = sol["sensitivities"]["la"][1:]
out = defaultdict(list)
for i, varkey in enumerate(m.bound_all["varkeys"]):
lam_gt, lam_lt = lam[2*i], lam[2*i+1]
if abs(lam_gt) >= 1e-7: # arbitrary threshold
out["sensitive to upper bound"].append(varkey)
if abs(lam_lt) >= 1e-7: # arbitrary threshold
out["sensitive to lower bound"].append(varkey)
value = mag(sol["variables"][varkey])
distance_below = np.log(value/m.bound_all["lb"])
distance_above = np.log(m.bound_all["ub"]/value)
if distance_below <= 3: # arbitrary threshold
out["value near lower bound"].append(varkey)
elif distance_above <= 3: # arbitrary threshold
out["value near upper bound"].append(varkey)
return out, solhold
if bound == "lb":
splitcost = np.exp(bst.splitlb)
elif bound == "ub":
splitcost = np.exp(bst.splitub)
else:
splitcost = np.exp((bst.splitlb + bst.splitub)/2)
if value <= bst.splitval:
lo, hi = bst.bounds[0], bst.splitval
loval, hival = bst.sols[0]["cost"], splitcost
else:
lo, hi = bst.splitval, bst.bounds[1]
loval, hival = splitcost, bst.sols[1]["cost"]
else:
lo, hi = bst.bounds
loval, hival = [sol["cost"] for sol in bst.sols]
lo, hi, loval, hival = np.log(list(map(mag, [lo, hi, loval, hival])))
interp = (hi-np.log(value))/float(hi-lo)
return np.exp(interp*loval + (1-interp)*hival)
def determine_unbounded_variables(self, model, solver=None, verbosity=0,
eps=1e-30, lower=None, upper=None, **kwargs):
"Returns labeled dictionary of unbounded variables."
m = self.bound_all_variables(model, eps, lower, upper)
sol = m.localsolve(solver, verbosity, **kwargs)
solhold = sol
lam = sol["sensitivities"]["la"][1:]
out = defaultdict(list)
for i, varkey in enumerate(m.bound_all["varkeys"]):
lam_gt, lam_lt = lam[2*i], lam[2*i+1]
if abs(lam_gt) >= 1e-7: # arbitrary threshold
out["sensitive to upper bound"].append(varkey)
if abs(lam_lt) >= 1e-7: # arbitrary threshold
out["sensitive to lower bound"].append(varkey)
value = mag(sol["variables"][varkey])
distance_below = np.log(value/m.bound_all["lb"])
distance_above = np.log(m.bound_all["ub"]/value)
if distance_below <= 3: # arbitrary threshold
out["value near lower bound"].append(varkey)
elif distance_above <= 3: # arbitrary threshold
out["value near upper bound"].append(varkey)
return out, solhold
def determine_unbounded_variables(self, model, solver=None, verbosity=0,
eps=1e-30, lower=None, upper=None, **kwargs):
"Returns labeled dictionary of unbounded variables."
m = self.bound_all_variables(model, eps, lower, upper)
sol = m.localsolve(solver, verbosity, **kwargs)
solhold = sol
lam = sol["sensitivities"]["la"][1:]
out = defaultdict(list)
for i, varkey in enumerate(m.bound_all["varkeys"]):
lam_gt, lam_lt = lam[2*i], lam[2*i+1]
if abs(lam_gt) >= 1e-7: # arbitrary threshold
out["sensitive to upper bound"].append(varkey)
if abs(lam_lt) >= 1e-7: # arbitrary threshold
out["sensitive to lower bound"].append(varkey)
value = mag(sol["variables"][varkey])
distance_below = np.log(value/m.bound_all["lb"])
distance_above = np.log(m.bound_all["ub"]/value)
if distance_below <= 3: # arbitrary threshold
out["value near lower bound"].append(varkey)
elif distance_above <= 3: # arbitrary threshold
out["value near upper bound"].append(varkey)
return out, solhold
## out["value near lower bound"].append(varkey)
## elif distance_above <= 3: # arbitrary threshold
## out["value near upper bound"].append(varkey)
return out, solhold
if __name__ == '__main__':
m = CommercialAircraft(30000)
m2 = CommercialAircraft(37000)
## sol = m.localsolve(solver="mosek", verbosity = 4, iteration_limit=100, skipsweepfailures=True)
sol, solhold = m.determine_unbounded_variables(m, solver="mosek",verbosity=4, iteration_limit=100, skipsweepfailures=True)
sol2, solhold2 = m2.determine_unbounded_variables(m2, solver="mosek",verbosity=4, iteration_limit=100, skipsweepfailures=True)
rangevec = [x for x in mag(solhold('ReqRng'))]
rangevec2 = [x for x in mag(solhold2('ReqRng'))]
#plot the fan pressure ratio sensitivity
plt.plot(rangevec, solhold["sensitivities"]["constants"]['\pi_f_EngineOnDesign, CommercialAircraft'])
plt.plot(rangevec2, solhold2["sensitivities"]["constants"]['\pi_f_EngineOnDesign, CommercialAircraft'],'-r')
plt.xlabel('Mission Range [mi]')
plt.ylabel('Sensitivity')
plt.title('Sensitivity to on Design Fan Pressure Ratio')
plt.legend(['30,000 ft', '37,000 ft'],loc=1)
plt.ylim(-1,1.4)
plt.savefig('\pi_f_sens_range_low.png')
plt.show()
#plot the sensitivy of numeng
plt.plot(rangevec, solhold["sensitivities"]["constants"]['numeng'])
plt.plot(rangevec2, solhold2["sensitivities"]["constants"]['numeng'],'-r')