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

如何在Python 3.10中并行运行两种全局优化算法?

并行运行全局优化器的实现方案

全局优化属于CPU密集型任务,受Python GIL限制,多线程无法有效提升效率,因此采用多进程实现并行,同时让每个进程的输出独立,方便在不同窗口查看进度。

修改思路

  • 将两个优化任务封装为独立函数,让每个函数在单独进程中运行
  • 利用进程独立输出流或日志文件分离进度信息,实现不同窗口查看各自优化进度

修改后的代码

import multiprocessing
from scipy.optimize import basinhopping
import dlib

# 假设你的目标优化函数已定义(替换为实际逻辑)
def opt(x):
    return (x[0]-0.3)**2 + (x[1]-0.6)**2 + (x[2]-0.8)**2

def opt_dlib(x):
    # dlib默认求最大值,若原opt是求最小值,返回其负值
    return -opt(x)

# 封装basinhopping优化任务
def run_basinhopping():
    def build_show_bh(MIN=None):
        if MIN is None:
            MIN = [0]
        def fn(xx, f, accept):
            if f < MIN[-1]:
                print(f"[basinhopping] 新最优解: {[round(x, 2) for x in xx]}, 目标值: {f}")
                MIN.append(f)
        return fn

    x0 = (0.5, 0.5, 0.5)
    bounds = [(0,1)]*3
    minimizer_kwargs = dict(method="L-BFGS-B", bounds=bounds)
    progress_f = [0]
    c = build_show_bh(progress_f)
    print("=== 启动basinhopping优化 ===")
    res = basinhopping(
        opt, 
        x0,
        minimizer_kwargs=minimizer_kwargs,
        niter=10,
        callback=c, 
        disp=True
    )
    print(f"basinhopping完成,最优目标值追踪: {progress_f}")
    return res

# 封装dlib优化任务
def run_dlib():
    lower_bounds = [0]*3
    upper_bounds = [1]*3
    print("=== 启动dlib全局优化 ===")
    x, y = dlib.find_max_global(opt_dlib, lower_bounds, upper_bounds, 10)
    print(f"dlib完成,最优输入: {x}, 目标值: {y}")
    return x, y

if __name__ == "__main__":
    # 创建两个进程分别运行优化任务
    p1 = multiprocessing.Process(target=run_basinhopping)
    p2 = multiprocessing.Process(target=run_dlib)

    # 启动进程
    p1.start()
    p2.start()

    # 可选:等待进程全部结束后再退出主进程
    p1.join()
    p2.join()

不同窗口查看进度的方法

  • 终端多窗口运行:将两个优化任务拆分为独立脚本(如run_bh.py和run_dlib.py),在两个终端窗口分别执行,每个窗口仅显示对应优化器的输出
  • 日志文件实时监控:在每个任务函数开头添加输出重定向到独立日志文件,再用tail -f 日志文件名命令在不同窗口实时查看进度
  • IDE多控制台:使用PyCharm等IDE时,为两个任务分别创建运行配置,每个配置对应独立控制台窗口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:43:22