Coverage for src/ensae_teaching_cs/faq/faq_cvxopt.py: 100%
3 statements
« prev ^ index » next coverage.py v7.1.0, created at 2023-04-28 06:23 +0200
« prev ^ index » next coverage.py v7.1.0, created at 2023-04-28 06:23 +0200
1# -*- coding: utf-8 -*-
2"""
3@file
4@brief Quelques problèmes récurrents avec `CVXOPT <http://cvxopt.org/>`_.
6"""
9def optimisation():
10 """
11 Quelques erreurs lorsqu'on cherche à optimiser avec `CVXOPT <http://cvxopt.org/>`_.
13 .. faqref::
14 :tag: cvxopt
15 :title: TypeError: 'q' must be a 'd' matrix with one column
17 Cette erreur survient même lorsque la dimension de la matrice ``q`` en question
18 est la dimension attendue. Dans le cas présent, elle est définie comme suit :
20 ::
22 q=matrix([[0,0,0]])
24 Mais la fonction :epkg:`coneqp`
25 retourne l'erreur :
27 ::
29 Traceback (most recent call last):
30 File "toutbiss.py", line 236, in <module>
31 liste_composition,liquide = actualisation(liste_df,index,liquide,liste_composition,
32 nb_jours_rendement,nb_jours_volatilite,volatilite_max)
33 File "toutbiss.py", line 136, in actualisation
34 objectif_repartition=volatilite_quadra2(liste_df,index,nb_jours_rendement,nb_jours_volatilite,volatilite_max)
35 File "toutbiss.py", line 121, in volatilite_quadra2
36 sol=solvers.coneqp(P=P,q=q,G=G,h=h,b=b,A=A)
37 File "C:\\Python35_x64\\lib\\site-packages\\cvxopt\\coneprog.py", line 1852, in coneqp
38 raise TypeError("'q' must be a 'd' matrix with one column")
39 TypeError: 'q' must be a 'd' matrix with one column
41 C'est dû au fait que le module fait la différence entre les entiers et les réels.
42 Il suffit juste d'écrire :
44 ::
46 q=matrix([[0.0,0.0,0.0]])
48 Bien sûr, si l'erreur est vraiment un problème de dimension, cette correction
49 n'aidera pas.
51 .. faqref::
52 :tag: cvxopt
53 :title: ValueError: Rank[|A|] < p or Rank[|[P; A; G]|] < n)
55 La fonction :epkg:`coneqp`
56 déclenche parfois cette erreur :
58 ::
60 Traceback (most recent call last):
61 File "C:\\Python35_x64\\lib\\site-packages\\cvxopt\\coneprog.py", line 2271, in coneqp
62 try: f3 = kktsolver(W)
63 File "C:\\Python35_x64\\lib\\site-packages\\cvxopt\\coneprog.py", line 1996, in kktsolver
64 return factor(W, P)
65 File "C:\\Python35_x64\\lib\\site-packages\\cvxopt\\misc.py", line 1457, in factor
66 lapack.potrf(F['S'])
67 ArithmeticError: 3
69 During handling of the above exception, another exception occurred:
71 Traceback (most recent call last):
72 File "toutbiss.py", line 237, in <module>
73 liste_composition,liquide = actualisation(liste_df,index,liquide,liste_composition,
74 nb_jours_rendement,nb_jours_volatilite,volatilite_max)
75 File "toutbiss.py", line 137, in actualisation
76 objectif_repartition=volatilite_quadra2(liste_df,index,nb_jours_rendement,nb_jours_volatilite,volatilite_max)
77 File "toutbiss.py", line 122, in volatilite_quadra2
78 sol=solvers.coneqp(P=P,q=q,G=G,h=h,b=b,A=A)
79 File "C:\\Python35_x64\\lib\\site-packages\\cvxopt\\coneprog.py", line 2274, in coneqp
80 raise ValueError("Rank(A) < p or Rank([P; A; G]) < n")
81 ValueError: Rank(A) < p or Rank([P; A; G]) < n
83 Le message est explicite mais si aucune de ces conditions n'est vérifiée, cela peut
84 vouloir dire qu'une autre hypothèse du problème à résoudre n'est pas vérifiée :
86 - la symétrie d'une matrice
87 - le fait qu'une matrice doit être `définie semi-positive <http://fr.wikipedia.org/wiki/Matrice_d%C3%A9finie_positive>`_
88 """
89 pass