首页 > 解决方案 > 我需要帮助优化此迭代

问题描述

这需要一个多小时才能运行。我之前问过同样的问题,但是因为我没有包含这些功能,所以它被关闭了。所以,他们在这里(没什么特别的)。我正在遍历几个值并构建一个具有最小值的数组。

def chi_interaction(theta1,theta2,phi1,phi2):
    return np.sin(theta1)*np.sin(phi2) - np.sin(theta2)*np.sin(phi1)

def xi_interaction(a,theta1,theta2,phi1,phi2):
    return a*np.cos(theta1)*np.cos(phi2) - 2*a*np.cos(theta2)*np.cos(phi1)

N = np.pi/12
internal_angle = np.pi/3

theta_list = np.arange(0,np.pi+N,N)
phi_list = np.arange(0,2*np.pi,N)

v = []
parameter_list = []

temp1 = 0

import itertools
for i,j,k,l1,l2,l3 in itertools.product(theta_list,theta_list,theta_list,phi_list,phi_list,phi_list):
    a = 2.5e-1
    m2 = l2 - 4*internal_angle
    m3 = l3 + 2*internal_angle
    n1 = l1 + internal_angle
    n3 = l3 + internal_angle
    temp2 = chi_interaction(i,j,l1,l2) + chi_interaction(j,k,m2,m3) \
        + chi_interaction(i,k,n1,n3) \
        + (xi_interaction(a,i,j,l1,l2) + xi_interaction(a,j,k,m2,m3) \
        + xi_interaction(a,i,k,n1,n3))
    if temp2 <= temp1:
        v.append(temp2)
        temp1 = temp2
        parameter_list.append([i,j,k,l1,n1,l2,m2,m3,n3])

interaction_array = np.array(v)
parameter_array = np.rad2deg(np.array(parameter_list))

print(np.amin(interaction_array))
interaction_min = np.where(interaction_array == np.amin(interaction_array))

print("[theta1, theta2, theta3, phi1-1, phi1-3, phi2-1, phi2-2, phi3-2, phi3-3] :",\
      parameter_array[interaction_min[0]])

标签: pythoniterationnonlinear-optimization

解决方案


推荐阅读