Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import gurobipy as gp
- from gurobipy import GRB
- from pynverse import inversefunc
- import copy
- def f(w):
- y = w[0]**2+w[1]**2
- return y
- def g(w):
- y = 2*w
- return y
- model = gp.Model("qp")
- model.setParam("PSDTol", float('Inf'))
- w1 = model.addVar(lb=-5, ub=5, name="w1", vtype=GRB.CONTINUOUS)#2 pesi
- w2 = model.addVar(lb=-5, ub=5, name="w2", vtype=GRB.CONTINUOUS)
- w=np.array([w1,w2])
- v = model.addVar(lb=-5, ub=5, name="v", vtype=GRB.CONTINUOUS)# errore DEVE essere uno
- model.setObjective(v,GRB.MINIMIZE)#si deve minimizzare v
- wi=np.array([-1,-1])
- for i in range(20):
- #calcolo f(w) e g(w) con i pesi iniziali e poi quelli aggiornati
- fwi=f(wi)
- gwi=g(wi)
- #aggiunta vincolo quindi aggiornamento dei bundle
- contr = v >= np.dot(gwi, (w-wi))+fwi
- model.addConstr(contr, str(i))
- model.optimize()
- #print soluzioni
- for v in model.getVars():
- #print variabili
- print('%s %g' % (v.varName, v.x))
- #aggiornamento pesi
- wi=np.array([model.getVarByName("w1").x, model.getVarByName("w2").x])
- #print funzione
- print('Obj: %g' % model.getObjective().getValue())
- #wi punto di minimo trovato nel bundle
- min_val=f(wi)
- print("Valore di minimo finale")
- print(min_val)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement