generate_problem.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import numpy as np
  2. from scipy import sparse
  3. import scipy.sparse.linalg as sla
  4. import utils.codegen_utils as cu
  5. # Set numpy seed for reproducibility
  6. np.random.seed(2)
  7. # Test sparse matrix construction vs dense
  8. test_sp_matrix_Adns = np.around(.6*np.random.rand(5, 6)) + np.random.randn(5,6)
  9. test_sp_matrix_A = sparse.csc_matrix(test_sp_matrix_Adns)
  10. # Test vector operations
  11. test_vec_ops_n = 10
  12. test_vec_ops_v1 = np.random.randn(test_vec_ops_n)
  13. test_vec_ops_v2 = np.random.randn(test_vec_ops_n)
  14. test_vec_ops_sc = np.random.randn()
  15. test_vec_ops_norm_inf = np.linalg.norm(test_vec_ops_v1, np.inf)
  16. test_vec_ops_norm_inf_diff = np.linalg.norm(test_vec_ops_v1 - test_vec_ops_v2,
  17. np.inf)
  18. test_vec_ops_add_scaled = test_vec_ops_v1 + test_vec_ops_sc * test_vec_ops_v2
  19. test_vec_ops_ew_reciprocal = np.reciprocal(test_vec_ops_v1)
  20. test_vec_ops_vec_prod = test_vec_ops_v1.dot(test_vec_ops_v2)
  21. test_vec_ops_ew_max_vec = np.maximum(test_vec_ops_v1, test_vec_ops_v2)
  22. test_vec_ops_ew_min_vec = np.minimum(test_vec_ops_v1, test_vec_ops_v2)
  23. # Test matrix operations
  24. test_mat_ops_n = 2
  25. test_mat_ops_A = sparse.random(test_mat_ops_n, test_mat_ops_n, density=0.8, format='csc')
  26. test_mat_ops_d = np.random.randn(test_mat_ops_n)
  27. D = sparse.diags(test_mat_ops_d, format='csc')
  28. test_mat_ops_prem_diag = D.dot(test_mat_ops_A).tocoo().tocsc() # Force matrix reordering
  29. test_mat_ops_postm_diag = test_mat_ops_A.dot(D).tocoo().tocsc() # Force matrix reordering
  30. test_mat_ops_inf_norm_cols = np.amax(np.abs(
  31. np.asarray(test_mat_ops_A.todense())), axis=0)
  32. test_mat_ops_inf_norm_rows = np.amax(np.abs(
  33. np.asarray(test_mat_ops_A.todense())), axis=1)
  34. # Test matrix vector operations
  35. m = 5
  36. n = 4
  37. p = 0.4
  38. test_mat_vec_n = n
  39. test_mat_vec_m = m
  40. test_mat_vec_A = sparse.random(m, n, density=1.0, format='csc')
  41. test_mat_vec_P = sparse.random(n, n, density=0.8, format='csc')
  42. test_mat_vec_P = test_mat_vec_P + test_mat_vec_P.T
  43. test_mat_vec_Pu = sparse.triu(test_mat_vec_P, format='csc')
  44. test_mat_vec_x = np.random.randn(n)
  45. test_mat_vec_y = np.random.randn(m)
  46. test_mat_vec_Ax = test_mat_vec_A.dot(test_mat_vec_x)
  47. test_mat_vec_Ax_cum = test_mat_vec_A.dot(test_mat_vec_x) + test_mat_vec_y
  48. test_mat_vec_ATy = test_mat_vec_A.T.dot(test_mat_vec_y)
  49. test_mat_vec_ATy_cum = test_mat_vec_A.T.dot(test_mat_vec_y) + test_mat_vec_x
  50. test_mat_vec_Px = test_mat_vec_P.dot(test_mat_vec_x)
  51. test_mat_vec_Px_cum = test_mat_vec_P.dot(test_mat_vec_x) + test_mat_vec_x
  52. # Test extract upper triangular
  53. test_mat_extr_triu_n = 5
  54. test_mat_extr_triu_P = sparse.random(test_mat_extr_triu_n, test_mat_extr_triu_n, density=0.8, format='csc')
  55. test_mat_extr_triu_P = test_mat_extr_triu_P + test_mat_extr_triu_P.T
  56. test_mat_extr_triu_Pu = sparse.triu(test_mat_extr_triu_P, format='csc')
  57. test_mat_extr_triu_P_inf_norm_cols = np.amax(np.abs(
  58. np.asarray(test_mat_extr_triu_P.todense())), axis=0)
  59. # Test compute quad form
  60. test_qpform_n = 4
  61. test_qpform_P = sparse.random(test_qpform_n, test_qpform_n, density=0.8, format='csc')
  62. test_qpform_P = test_qpform_P + test_qpform_P.T
  63. test_qpform_Pu = sparse.triu(test_qpform_P, format='csc')
  64. test_qpform_x = np.random.randn(test_qpform_n)
  65. test_qpform_value = .5 * test_qpform_x.T.dot(test_qpform_P.dot(test_qpform_x))
  66. # Generate test data and solutions
  67. data = {'test_sp_matrix_A': test_sp_matrix_A,
  68. 'test_sp_matrix_Adns': test_sp_matrix_Adns,
  69. 'test_vec_ops_n': test_vec_ops_n,
  70. 'test_vec_ops_v1': test_vec_ops_v1,
  71. 'test_vec_ops_v2': test_vec_ops_v2,
  72. 'test_vec_ops_sc': test_vec_ops_sc,
  73. 'test_vec_ops_norm_inf': test_vec_ops_norm_inf,
  74. 'test_vec_ops_norm_inf_diff': test_vec_ops_norm_inf_diff,
  75. 'test_vec_ops_add_scaled': test_vec_ops_add_scaled,
  76. 'test_vec_ops_ew_reciprocal': test_vec_ops_ew_reciprocal,
  77. 'test_vec_ops_vec_prod': test_vec_ops_vec_prod,
  78. 'test_vec_ops_ew_max_vec': test_vec_ops_ew_max_vec,
  79. 'test_vec_ops_ew_min_vec': test_vec_ops_ew_min_vec,
  80. 'test_mat_ops_n': test_mat_ops_n,
  81. 'test_mat_ops_A': test_mat_ops_A,
  82. 'test_mat_ops_d': test_mat_ops_d,
  83. 'test_mat_ops_prem_diag': test_mat_ops_prem_diag,
  84. 'test_mat_ops_postm_diag': test_mat_ops_postm_diag,
  85. 'test_mat_ops_inf_norm_cols': test_mat_ops_inf_norm_cols,
  86. 'test_mat_ops_inf_norm_rows': test_mat_ops_inf_norm_rows,
  87. 'test_mat_vec_n': test_mat_vec_n,
  88. 'test_mat_vec_m': test_mat_vec_m,
  89. 'test_mat_vec_A': test_mat_vec_A,
  90. 'test_mat_vec_Pu': test_mat_vec_Pu,
  91. 'test_mat_vec_x': test_mat_vec_x,
  92. 'test_mat_vec_y': test_mat_vec_y,
  93. 'test_mat_vec_Ax': test_mat_vec_Ax,
  94. 'test_mat_vec_Ax_cum': test_mat_vec_Ax_cum,
  95. 'test_mat_vec_ATy': test_mat_vec_ATy,
  96. 'test_mat_vec_ATy_cum': test_mat_vec_ATy_cum,
  97. 'test_mat_vec_Px': test_mat_vec_Px,
  98. 'test_mat_vec_Px_cum': test_mat_vec_Px_cum,
  99. 'test_mat_extr_triu_n': test_mat_extr_triu_n,
  100. 'test_mat_extr_triu_P': test_mat_extr_triu_P,
  101. 'test_mat_extr_triu_Pu': test_mat_extr_triu_Pu,
  102. 'test_mat_extr_triu_P_inf_norm_cols':
  103. test_mat_extr_triu_P_inf_norm_cols,
  104. 'test_qpform_n': test_qpform_n,
  105. 'test_qpform_Pu': test_qpform_Pu,
  106. 'test_qpform_x': test_qpform_x,
  107. 'test_qpform_value': test_qpform_value,
  108. }
  109. # Generate test data
  110. cu.generate_data('lin_alg', data)