You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Gekko优化求解器时出现路径错误

解决Gekko求解器的路径错误问题

问题现象

运行Gekko优化代码时出现路径错误,修改m.options.SOLVER参数(1/2/3)后问题依旧,核心错误为临时目录下找不到options.json和results.json文件。

错误详情

Traceback (most recent call last):
File "C:\Users\17576\Documents\Python\Scratch.py", line 33, in
m.solve()
File "C:\Users\17576\Documents\Python\venv\lib\site-packages\gekko\gekko.py", line 2227, in solve
self.load_JSON()
File "C:\Users\17576\Documents\Python\venv\lib\site-packages\gekko\gk_post_solve.py", line 13, in load_JSON
f = open(os.path.join(self._path,'options.json'))
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\17576\AppData\Local\Temp\tmpp6w85mm5gk_model0\options.json'

Error: The system cannot find the path specified.

Error: 'results.json' not found. Check above for additional error details

Process finished with exit code 1

相关代码

from gekko import GEKKO

# Variables
var_a = 155.31
var_b = 6.27
var_c = 12
var_d = 750
var_e = 10
var_f = 1
var_d_lower_bound_percentage = .99
var_e_lower_bound_percentage = .99
var_e_upper_bound_percentage = 1.01
x_value = 1
y_value = 3

# Optimization
m = GEKKO(remote=False)

x = m.Var(value=x_value, lb=0)
y = m.Var(value=y_value, lb=0, integer=True)

m.Equation(x*var_a + y*var_b <= var_d)
m.Equation(x*var_a + y*var_b >= var_d*var_d_lower_bound_percentage)

m.Equation(((x*var_a)/(x*var_a + y*var_b)) + ((y*var_b)/(x*var_a + y*var_b)) == 1)

m.Equation(((x*var_a)/(x*var_a + y*var_b))*var_f + ((y*var_b)/(x*var_a + y*var_b))*var_c <= var_e*var_e_upper_bound_percentage)
m.Equation(((x*var_a)/(x*var_a + y*var_b))*var_f + ((y*var_b)/(x*var_a + y*var_b))*var_c >= var_e*var_e_lower_bound_percentage)

m.Obj(((x*var_a)/(x*var_a + y*var_b))*var_f + ((y*var_b)/(x*var_a + y*var_b))*var_c)

m.options.SOLVER = 1
m.solve()

print(x.value)
print(y.value)

解决方案

1. 重装Gekko确保求解器完整

本地模式依赖内置求解器,若安装不完整会导致临时文件生成失败:

pip uninstall gekko -y
pip install gekko --no-cache-dir

2. 手动指定可读写的工作目录

临时目录权限受限会导致文件无法生成,手动设置本地目录:

# 替换为你有权限的本地路径
m = GEKKO(remote=False, path='./gekko_workdir')

3. 删除冗余方程

原代码中存在恒成立的冗余方程,会增加求解负担甚至触发异常:

# 删除此行:
# m.Equation(((x*var_a)/(x*var_a + y*var_b)) + ((y*var_b)/(x*var_a + y*var_b)) == 1)

4. 避免分母为零

给分式分母添加最小值约束,防止求解器出现数值异常:

m.Equation(x*var_a + y*var_b >= 1e-6)

5. 检查权限

以管理员身份运行Python脚本,确保对临时目录(C:\Users\17576\AppData\Local\Temp)有读写权限。

修正后的代码示例

from gekko import GEKKO

# Variables
var_a = 155.31
var_b = 6.27
var_c = 12
var_d = 750
var_e = 10
var_f = 1
var_d_lower_bound_percentage = .99
var_e_lower_bound_percentage = .99
var_e_upper_bound_percentage = 1.01
x_value = 1
y_value = 3

# Optimization - 指定工作目录
m = GEKKO(remote=False, path='./gekko_work')

x = m.Var(value=x_value, lb=0)
y = m.Var(value=y_value, lb=0, integer=True)

# 资源约束
m.Equation(x*var_a + y*var_b <= var_d)
m.Equation(x*var_a + y*var_b >= var_d*var_d_lower_bound_percentage)
# 确保分母不为零
m.Equation(x*var_a + y*var_b >= 1e-6)

# 定义加权平均变量简化代码
weighted_avg = ((x*var_a)/(x*var_a + y*var_b))*var_f + ((y*var_b)/(x*var_a + y*var_b))*var_c
m.Equation(weighted_avg <= var_e*var_e_upper_bound_percentage)
m.Equation(weighted_avg >= var_e*var_e_lower_bound_percentage)

# 目标函数
m.Obj(weighted_avg)

m.options.SOLVER = 1
m.solve(disp=True)  # 开启disp查看求解器详细输出

print(f"x值: {x.value[0]}")
print(f"y值: {y.value[0]}")

内容的提问来源于stack exchange,提问作者JackW24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:56:03