Code source de ensae_teaching_cs.faq.faq_cvxopt

# -*- coding: utf-8 -*-
"""
Quelques problèmes récurrents avec `CVXOPT <http://cvxopt.org/>`_.



:githublink:`%|py|7`
"""


[docs]def optimisation(): """ Quelques erreurs lorsqu'on cherche à optimiser avec `CVXOPT <http://cvxopt.org/>`_. .. faqref:: :tag: cvxopt :title: 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 :epkg:`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. .. faqref:: :tag: cvxopt :title: ValueError: Rank[|A|] < p or Rank[|[P; A; G]|] < n) La fonction :epkg:`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 : - la symétrie d'une matrice - le fait qu'une matrice doit être `définie semi-positive <http://fr.wikipedia.org/wiki/Matrice_d%C3%A9finie_positive>`_ :githublink:`%|py|88` """ pass