Spaces:
Runtime error
Runtime error
| import numpy as np | |
| # ------- BEGIN FUNCTIONS ------- | |
| # 2d Camel3 | |
| def testfunc_2d(x): | |
| if len(x.shape) == 2: | |
| N, n = x.shape | |
| axis = 1 | |
| else: | |
| n = len(x) | |
| axis = 0 | |
| y = np.sum(x**2, axis=axis, keepdims=True) | |
| return y | |
| def camel3_2d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| return (2*X[:, 0]**2 - 1.05*X[:, 0]**4 + (X[:, 0]**6)/6 + X[:, 0]*X[:, 1] + X[:, 1]**2).reshape(-1, 1) | |
| # 2d Camel16 | |
| def camel16_2d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| return (4*X[:, 0]**2 - 2.1*X[:, 0]**4 + (X[:, 0]**6)/3 + X[:, 0]*X[:, 1] - 4*X[:, 1]**2 + 4*X[:, 1]**4).reshape(-1, 1) | |
| # 2d Treccani | |
| def treccani_2d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| return (X[:, 0]**4 + 4*X[:, 0]**3 + 4*X[:, 0]**2 + X[:, 1]**2).reshape(-1, 1) | |
| # 2d Goldstein | |
| def goldstein_2d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| x1 = X[:, 0] | |
| x2 = X[:, 1] | |
| term1 = 1 + (x1 + x2 + 1)**2 * (19 - 14*x1 + 3*x1**2 - 14*x2 + 6*x1*x2 + 3*x2**2) | |
| term2 = 30 + (2*x1 - 3*x2)**2 * (16 - 32*x1 + 12*x1**2 + 48*x2 - 36*x1*x2 + 27*x2**2) | |
| return (term1 * term2).reshape(-1, 1) | |
| # 2d Branin | |
| def branin_2d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| x1 = X[:, 0] | |
| x2 = X[:, 1] | |
| return ((x2 - (5.1 / (4 * np.pi**2)) * x1**2 + (5 / np.pi) * x1 - 6)**2 + (10 * (1 - (1 / (8 * np.pi))) * np.cos(x1)) + 10).reshape(-1, 1) | |
| # 2d Rosenbrock | |
| def rosenbrock_2d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| return (0.5 * (X[:, 0]**2 - X[:, 1])**2 + (X[:, 0] - 1)**2).reshape(-1, 1) | |
| # 2d Ackley | |
| def ackley_2d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| x1 = X[:, 0] | |
| x2 = X[:, 1] | |
| return (20 + np.exp(1) - 20 * np.exp(-0.2 * np.sqrt(0.5 * (x1**2 + x2**2))) - np.exp(0.5 * (np.cos(2 * np.pi * x1) + np.cos(2 * np.pi * x2)))).reshape(-1, 1) | |
| # 10d Rosenbrock | |
| def rosenbrock_10d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| return (np.sum(100 * (X[:, :-1]**2 - X[:, 1:])**2 + (X[:, :-1] - 1)**2, axis=1)).reshape(-1, 1) | |
| # 10d Griewank | |
| def griewank_10d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| d = X.shape[1] | |
| sum_sq = np.sum((X[:, 1:] - 100)**2, axis=1) | |
| prod_cos = np.prod(np.cos((X - 100) / np.sqrt(np.arange(1, d + 1))), axis=1) | |
| return (sum_sq / 4000 - prod_cos + 1).reshape(-1, 1) | |
| # 10d Rastrigin | |
| def rastrigin_10d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| return (np.sum(X**2 - 10 * np.cos(2 * np.pi * X) + 10, axis=1)).reshape(-1, 1) | |
| # 2d Rastrigin | |
| def rastrigin_2d(X): | |
| try: | |
| X.shape[1] | |
| except: | |
| X = np.array([X]) | |
| return (np.sum(X**2 - 10 * np.cos(2 * np.pi * X) + 10, axis=1)).reshape(-1, 1) | |
| # ------- END FUNCTIONS ------- | |
| if __name__ == "__main__": | |
| import sys | |
| import matplotlib.pyplot as plt | |
| if len(sys.argv) != 2: | |
| print("Usage: python functions.py [function_name]") | |
| sys.exit(1) | |
| function_name = sys.argv[1] | |
| # Evaluate the function based on the provided name | |
| f = globals().get(function_name) | |
| if f == camel3_2d or f == camel16_2d or f == treccani_2d: | |
| x1_min = x2_min = -5 | |
| x1_max = x2_max = 5 | |
| elif f == goldstein_2d: | |
| x1_min = x2_min = -2 | |
| x1_max = x2_max = 2 | |
| elif f == branin_2d: | |
| x1_min, x1_max = (-5, 10) | |
| x2_min, x2_max = (0, 15) | |
| elif f == rosenbrock_2d or f == rosenbrock_10d: | |
| x1_min = x2_min = -2.048 | |
| x1_max = x2_max = 2.048 | |
| elif f == ackley_2d: | |
| # normally it was (-15, 30) but the plot was bad in that case | |
| x1_min = x2_min = -30 | |
| x1_max = x2_max = 30 | |
| elif f == griewank_10d: | |
| x1_min = x2_min = -600 | |
| x1_max = x2_max = 600 | |
| elif f == rastrigin_10d: | |
| x1_min = x2_min = -5.12 | |
| x1_max = x2_max = 5.12 | |
| elif f == rastrigin_2d: | |
| x1_min = x2_min = -5.12 | |
| x1_max = x2_max = 5.12 | |
| elif f == testfunc_2d: | |
| x1_min = x2_min = -5 | |
| x1_max = x2_max = 5 | |
| N = 100 | |
| x1 = np.linspace(x1_min, x1_max, N) | |
| x2 = np.linspace(x2_min, x2_max, N) | |
| # x2 = np.random.uniform(0, 1, N) * x1 | |
| X1, X2 = np.meshgrid(x1, x2) | |
| Y = f(np.column_stack((X1.ravel(), X2.ravel()))).reshape(X1.shape) | |
| fig = plt.figure(figsize=(11, 7)) | |
| ax = fig.add_subplot(111, projection='3d') | |
| ax.plot_surface(X1, X2, Y, cmap='jet') | |
| ax.set_xlabel('x1') | |
| ax.set_ylabel('x2') | |
| ax.set_zlabel('y') | |
| plt.show() | |