def construct_nvida(): from msppy.msp import MSLP import numpy as np nvica = MSLP(T=2, sense=-1, bound=100) for t in range(2): m = nvica[t] buy_now, buy_past = m.addStateVar(name='bought', obj=-1.0) if t == 1: sold = m.addVar(name='sold', obj=2) unsatisfied = m.addVar(name='unsatisfied') recycled = m.addVar(name='recycled', obj=0.5) m.addConstr(sold + unsatisfied == 0, uncertainty={'rhs': range(11)}) m.addConstr(sold + recycled == buy_past) nvica.set_AVaR(l=0.5, a=0.1, method='direct') return nvica
Markov_states = [ [[5.0]], [[5.0]], [[5.0],[8.0]], [[5.0],[8.0]] ], transition_matrix = [ [[1]], [[1]], [[0.6,0.4]], [[0.3,0.7],[0.3,0.7]] ] ) for t in range(T): m = newsVendor[t] now, past = m.addStateVar(ub=100, name="stock") if t > 0: buy = m.addVar(name="buy", uncertainty_dependent=0) sell = m.addVar(name="sell", obj=- RetailPrice) m.addConstr(now == past + buy - sell) random = m.addVar(lb=-gurobipy.GRB.INFINITY, ub=gurobipy.GRB.INFINITY, name="demand") m.addConstr(random == 20, uncertainty={'rhs': Demand[t-1]}) m.addConstr(sell <= random) m.addConstr(sell >= 0.5 * random) if t == 0: m.addConstr(now == 5.0) Extensive(newsVendor).solve() newsVendor.set_AVaR(a=0.6, l=0.5) Extensive(newsVendor).solve() SDDP(newsVendor).solve(max_iterations=100)
m.addConstrs( now[j] == capm[j] + idio[j] for j in range(N) ) for j in range(N): m.addConstr(past[j] == capm[j], uncertainty_dependent={past[j]:j}) m.addConstr(past[j] == idio[j], uncertainty={past[j]:f(alpha[j],sigma[j])}) m.addConstr(now[N] == (1+rf) * past[N]) AssetMgt.discretize( n_samples=100, method='input', Markov_states=Markov_states, transition_matrix=transition_matrix, random_state=888, ) AssetMgt.set_AVaR(lambda_=lambda_, alpha_=0.25) AssetMgt_SDDP = SDDP(AssetMgt) AssetMgt_SDDP.solve(max_iterations=50, n_steps=3, n_processes=3) evaluation = Evaluation(AssetMgt) evaluation.run(n_simulations=1000, random_state=666) evaluationTrue = EvaluationTrue(AssetMgt) evaluationTrue.run(n_simulations=1000, random_state=666) result = { 'mean':numpy.mean(evaluation.pv)-100, 'std':numpy.std(evaluation.pv), 'VAR': numpy.quantile(evaluation.pv,0.05)-100, 'skewness': stats.skew(evaluation.pv), 'kurtosis': 3+stats.kurtosis(evaluation.pv), 'Sharpe Ratio': (numpy.mean(evaluation.pv)-100-0.005513771)/numpy.std(evaluation.pv) }