dot_wing

Untitled

Oct 8th, 2017
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.42 KB | None | 0 0
  1. import numpy as np
  2. from scipy.optimize import minimize
  3.  
  4. def objective(x):
  5.     sum = 0
  6.     for i in range(4):
  7.         for j in range(3):
  8.             sum = sum + x[i][j]*q[i][j]
  9.     return -1*sum
  10.  
  11. def constraint1(i):
  12.     def g(x):
  13.         con = 20
  14.         for k in range(3):
  15.             con = con - x[i][k]
  16.         return con
  17.     return g
  18.  
  19. def constraint2(k):
  20.     def h(x):
  21.         sum_eq = 20
  22.         for i in range(4):
  23.             sum_eq = sum_eq - x[i][k]
  24.         return sum_eq
  25.     return h
  26.  
  27. # initial guesses
  28. x0 = np.array([[5,5,5],[5,5,5],[5,5,5],[5,5,5]])
  29. q = np.array([[5,4,3],[5,4,3],[5,4,3],[5,4,3]])
  30.  
  31. # show initial objective
  32. print('Initial Objective: ' + str(objective(x0)))
  33.  
  34. # optimize
  35. cons = []
  36. for i in range(4):
  37.     cons.append({'type': 'ineq', 'fun': constraint1(i)})
  38.  
  39. for k in range(3):
  40.     cons.append({'type': 'ineq', 'fun': constraint2(k)})
  41.  
  42.  
  43. solution = minimize(objective,x0,method='SLSQP',\
  44.                     bounds=None,constraints=cons)
  45. x = solution.x
  46.  
  47. # show final objective
  48. print('Final Objective: ' + str(objective(x)))
  49.  
  50. # print solution
  51. print('Solution')
  52. print('x00 = ' + str(x[0][0]))
  53. print('x01 = ' + str(x[0][1]))
  54. print('x02 = ' + str(x[0][2]))
  55. print('x10 = ' + str(x[1][0]))
  56. print('x11 = ' + str(x[1][1]))
  57. print('x12 = ' + str(x[1][2]))
  58. print('x20 = ' + str(x[1][0]))
  59. print('x21 = ' + str(x[2][1]))
  60. print('x22 = ' + str(x[2][2]))
  61. print('x23 = ' + str(x[2][3]))
  62. print('x30 = ' + str(x[3][0]))
  63. print('x31 = ' + str(x[3][1]))
  64. print('x32 = ' + str(x[3][2]))
Add Comment
Please, Sign In to add comment