Coverage for src/ensae_teaching_cs/faq/faq_cvxopt.py: 100%

3 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-01-27 05:44 +0100

1# -*- coding: utf-8 -*- 

2""" 

3@file 

4@brief Quelques problèmes récurrents avec `CVXOPT <http://cvxopt.org/>`_. 

5 

6""" 

7 

8 

9def optimisation(): 

10 """ 

11 Quelques erreurs lorsqu'on cherche à optimiser avec `CVXOPT <http://cvxopt.org/>`_. 

12 

13 .. faqref:: 

14 :tag: cvxopt 

15 :title: TypeError: 'q' must be a 'd' matrix with one column 

16 

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 : 

19 

20 :: 

21 

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

23 

24 Mais la fonction :epkg:`coneqp` 

25 retourne l'erreur : 

26 

27 :: 

28 

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 

40 

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 : 

43 

44 :: 

45 

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

47 

48 Bien sûr, si l'erreur est vraiment un problème de dimension, cette correction 

49 n'aidera pas. 

50 

51 .. faqref:: 

52 :tag: cvxopt 

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

54 

55 La fonction :epkg:`coneqp` 

56 déclenche parfois cette erreur : 

57 

58 :: 

59 

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 

68 

69 During handling of the above exception, another exception occurred: 

70 

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 

82 

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 : 

85 

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