def func(ndim, x): alp1 = 0. alp2 = 0. alp3 = 0. print('x =', x) print('A =', A) print('Ax =', om.produitMat(A, x)) cost = 0.5 * ov.scal(om.produitMat(A, x), x) # print('cost = ', cost) cons1 = x[0] + x[1] + x[2] - 1 cons2 = x[0] * rendActions[0] + x[1] * rendActions[1] + x[2] * rendActions[ 2] - revObj cons3 = x[0] * x[1] / x[0] * x[1] - x[1] * x[2] / x[1] * x[2] f = cost + alp1 * abs(cons1) + alp2 * abs(cons2) + alp3 * abs(cons3) return f
X.append([1, dates[i]]) X = np.asarray(X) Y1 = [] for i in range(len(temperature1)): Y1.append(temperature1[i]) #Y1 = np.asarray(Y1) Y2 = [] for i in range(len(temperature2)): Y2.append(temperature2[i]) #Y2 = np.asarray(Y2) #On va résoudre un système du type AX = B A = om.produitMat(om.transpose(X), X) B1 = om.produitMat(om.transpose(X), Y1) B2 = om.produitMat(om.transpose(X), Y2) ###RECHERCHE DES COEFFICIENTS X1 = np.linalg.solve(A, B1) X2 = np.linalg.solve(A, B2) ###CONSTRUCTION POLYNOME D APPROXIMATION Droite1 = [] Droite2 = [] for i in dates:
def J(x): evaluation = om.produitMatNbr(0.5, ov.scal(om.produitMat(A, x), x)) return evaluation
def H(p): xPrime = invA * transB * p evaluation = 1 / 2 * ov.scal(om.produitMat( A, invA * xPrime), xPrime) + ov.scal(p, om.produitMat(B, xPrime) - c) return evaluation
c = ([[1], [revObj]]) invA = om.inverse(A) transB = om.transposee(B) def H(p): xPrime = invA * transB * p evaluation = 1 / 2 * ov.scal(om.produitMat( A, invA * xPrime), xPrime) + ov.scal(p, om.produitMat(B, xPrime) - c) return evaluation #On resoud une equation du type AX = B avec A = -BA^(-1)B^T et B = c Atemp = om.produitMat(om.produitMatNbr(-1, B), om.produitMat(invA, transB)) p = np.linalg.solve(Atemp, c) print('p = ', p) x = om.produitMat(invA, om.produitMat(transB, p)) for i in range(nActions): x2 = np.zeros(nActions) x2[i] = max(x[i], 0) propInvestiePrimal = x2 print('propInvestiePrimal', propInvestiePrimal) ##METHODE UZAWA ###########################################