test.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import scipy.optimize
  2. import math
  3. def himmelblau(x, y):
  4. return (x * x + y - 11) * ( x * x + y - 11) + (x + y * y - 7) * (x + y * y - 7)
  5. def beale(x, y):
  6. return math.pow(1.5 - x + x*y, 2) + math.pow(2.25 - x + x*y*y, 2) + math.pow(2.625 - x + x*y*y*y, 2);
  7. def main():
  8. if True:
  9. initial = [-3.670609291875735,3.8585484651848674]
  10. solution = scipy.optimize.fmin(lambda x: beale(x[0], x[1]),
  11. initial, retall=True)
  12. print "loss", beale(solution[0][0], solution[0][1])
  13. elif False:
  14. def banana(x, y):
  15. return (1 - x) * (1 - x) + 100 * (y - x * x) * ( y - x * x)
  16. initial = [-1.675793744623661,-1.945310341194272]
  17. solution = scipy.optimize.fmin(lambda x: banana(x[0], x[1]),
  18. initial, retall=True)
  19. elif False:
  20. initial = [4.474377192556858, 0.22207495383918285]
  21. initial = [-7.185110699385405, 0.01616438291966915]
  22. solution = scipy.optimize.fmin(lambda x: himmelblau(x[0], x[1]),
  23. initial, retall=True)
  24. else:
  25. solution = scipy.optimize.fmin(lambda x: (x[0]-10) * (x[0]-10), [0], retall=True)
  26. print solution[0]
  27. for i, s in enumerate(solution[1]):
  28. print str(i) + ":", s
  29. if __name__ == "__main__":
  30. main()