尝试优化时出现 BrokenProcessPool 错误

问题描述 投票:0回答:0

(我提前道歉,如果我描述我的问题很糟糕并且我缺乏行话知识。我是一名量子计算物理学家,刚开始学习机器学习!)。

我正在尝试运行优化方法 (krotov.optimize_pulses),我在其中定义了一个调用另一个函数的函数:

def eps0(t, args):
        T = tlist[-1]
        return 4 * np.exp(-40.0 * (t / T - 0.5) ** 2)

def transmon_hamiltonian(Ec=0.386, EjEc=45, nstates=8, ng=0.0, T=10.0):
    """Transmon Hamiltonian

    Args:
        Ec: capacitive energy
        EjEc: ratio `Ej` / `Ec`
        nstates: defines the maximum and minimum states for the basis. The
            truncated basis will have a total of ``2*nstates + 1`` states

        ng: offset charge
        T: gate duration
    """

    Ej = EjEc * Ec
    n = np.arange(-nstates, nstates + 1)
    print(n)
    up = np.diag(np.ones(2 * nstates), k=-1)
    do = up.T
    H0 = qutip.Qobj(np.diag(4 * Ec * (n - ng) ** 2) - Ej * (up + do) / 2.0)
    H1 = qutip.Qobj(-2 * np.diag(n))
    
    return [H0, [H1, eps0]]

然后我创建我的“目标”变量,我将其作为参数发送到 krotov.optimize_pulses 中。

objectives = krotov.gate_objectives(
    basis_states=[psi0, psi1], gate=X, H=H
)

opt_result = krotov.optimize_pulses(
    objectives,
    pulse_options,
    tlist,
    propagator=krotov.propagators.expm,
    chi_constructor=krotov.functionals.chis_re,
    info_hook=krotov.info_hooks.print_table(
        J_T=krotov.functionals.J_T_re,
        show_g_a_int_per_pulse=True,
        unicode=False,
    ),
    check_convergence=krotov.convergence.Or(
        krotov.convergence.value_below(1e-3, name='J_T'),
        krotov.convergence.delta_below(1e-5),
        krotov.convergence.check_monotonic_error,
    ),
    iter_stop=5,
    parallel_map=(
        krotov.parallelization.parallel_map,
        krotov.parallelization.parallel_map,
        krotov.parallelization.parallel_map_fw_prop_step,
    ),
)

它引发的第一个错误是“AttributeError: Can't get attribute 'eps0' on main' (built-in)>”其次是“BrokenProcessPool:进程池中的进程在未来运行时突然终止或待定。”

关于如何调试这个有什么想法吗?

我试过使用多进程/池,但我不明白它背后的机制!

optimization multiprocess
© www.soinside.com 2019 - 2024. All rights reserved.