module faq.faq_cvxopt#

Short summary#

module ensae_teaching_cs.faq.faq_cvxopt

Quelques problèmes récurrents avec CVXOPT.

source on GitHub

Functions#

function

truncated documentation

optimisation

Quelques erreurs lorsqu’on cherche à optimiser avec CVXOPT.

Documentation#

Quelques problèmes récurrents avec CVXOPT.

source on GitHub

ensae_teaching_cs.faq.faq_cvxopt.optimisation()#

Quelques erreurs lorsqu’on cherche à optimiser avec CVXOPT.

TypeError: “q” must be a “d” matrix with one column

Cette erreur survient même lorsque la dimension de la matrice q en question est la dimension attendue. Dans le cas présent, elle est définie comme suit :

q=matrix([[0,0,0]])

Mais la fonction coneqp retourne l’erreur :

Traceback (most recent call last):
  File "toutbiss.py", line 236, in <module>
    liste_composition,liquide = actualisation(liste_df,index,liquide,liste_composition,
                                    nb_jours_rendement,nb_jours_volatilite,volatilite_max)
  File "toutbiss.py", line 136, in actualisation
    objectif_repartition=volatilite_quadra2(liste_df,index,nb_jours_rendement,nb_jours_volatilite,volatilite_max)
  File "toutbiss.py", line 121, in volatilite_quadra2
    sol=solvers.coneqp(P=P,q=q,G=G,h=h,b=b,A=A)
  File "C:\Python35_x64\lib\site-packages\cvxopt\coneprog.py", line 1852, in coneqp
    raise TypeError("'q' must be a 'd' matrix with one column")
TypeError: 'q' must be a 'd' matrix with one column

C’est dû au fait que le module fait la différence entre les entiers et les réels. Il suffit juste d’écrire :

q=matrix([[0.0,0.0,0.0]])

Bien sûr, si l’erreur est vraiment un problème de dimension, cette correction n’aidera pas.

ValueError: Rank[|A|] < p or Rank[|[P; A; G]|] < n)

La fonction coneqp déclenche parfois cette erreur :

Traceback (most recent call last):
  File "C:\Python35_x64\lib\site-packages\cvxopt\coneprog.py", line 2271, in coneqp
    try: f3 = kktsolver(W)
  File "C:\Python35_x64\lib\site-packages\cvxopt\coneprog.py", line 1996, in kktsolver
    return factor(W, P)
  File "C:\Python35_x64\lib\site-packages\cvxopt\misc.py", line 1457, in factor
    lapack.potrf(F['S'])
ArithmeticError: 3

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "toutbiss.py", line 237, in <module>
    liste_composition,liquide = actualisation(liste_df,index,liquide,liste_composition,
                                        nb_jours_rendement,nb_jours_volatilite,volatilite_max)
  File "toutbiss.py", line 137, in actualisation
    objectif_repartition=volatilite_quadra2(liste_df,index,nb_jours_rendement,nb_jours_volatilite,volatilite_max)
  File "toutbiss.py", line 122, in volatilite_quadra2
    sol=solvers.coneqp(P=P,q=q,G=G,h=h,b=b,A=A)
  File "C:\Python35_x64\lib\site-packages\cvxopt\coneprog.py", line 2274, in coneqp
    raise ValueError("Rank(A) < p or Rank([P; A; G]) < n")
ValueError: Rank(A) < p or Rank([P; A; G]) < n

Le message est explicite mais si aucune de ces conditions n’est vérifiée, cela peut vouloir dire qu’une autre hypothèse du problème à résoudre n’est pas vérifiée :

source on GitHub