from gekko import GEKKO from hyperopt import fmin, tpe, hp from hyperopt import STATUS_OK, STATUS_FAIL # Define the search space for the hyperparameters space = {'x1': hp.quniform('x1', 0, 10, 3), 'x2': hp.quniform('x2', 0, 10, 3), 'x3': hp.quniform('x3', 0, 10, 3)} def objective(params): m = GEKKO(remote=False) x = m.Array(m.Var,3,lb=0) x1,x2,x3 = x x1.value = params['x1'] x2.value = params['x2'] x3.value = params['x3'] m.Minimize(1000-x1**2-2*x2**2-x3**2-x1*x2-x1*x3) m.Equations([8*x1+14*x2+7*x3==56, x1**2+x2**2+x3**2>=25]) m.options.SOLVER = 1 m.solve(disp=False,debug=False) obj = m.options.objfcnval if m.options.APPSTATUS==1: s=STATUS_OK else: s=STATUS_FAIL m.cleanup() return {'loss':obj, 'status': s, 'x':x} best = fmin(objective, space, algo=tpe.suggest, max_evals=50) sol = objective(best) print(f"Solution Status: {sol['status']}") print(f"Objective: {sol['loss']:.2f}") print(f"Solution: {sol['x']}")