使用 numpy 进行更快的详尽研究

问题描述

我正在尝试使用详尽的研究来最大化两个函数间的最小值,此解决方案有效,但 python 中的循环消耗了大量计算时间。有没有有效的方法使用 numpy(网格或矢量化)来解决这个问题?

代码

以下函数用于穷举研究方法

    try (CSVReader reader = new CSVReader(new FileReader(file))) {
            List<String[]> r = reader.readAll();
            r.forEach(x -> System.out.println(Arrays.toString(x)));
        }

详尽的研究方法采用 6 个参数(标量或一维数组)。目前我只想在标量上计算我的代码,然后我可以使用另一个函数来浏览这些参数,如果它们是一维数组。

import numpy as np

def F1(x):
  return (x/11)**10

def F2(x,y,z):
  return z+x/y

def F3(x,z,a,b,c):
  return ((x+y)**z)/((a-b)**c)

解决方法

你可以这样做:

A,B,C = np.meshgrid(a,b,c)
mask = P1*C+P2*B+2*(A*B*C) <= F1(P3)
A = A[mask]
B = B[mask]
C = C[mask]
  
f_1 = F2(A,C,P6)
f_2 = F3(A,10,P4,P5)
min_f = np.minimum(f_1,f_2)
ind = np.argmax(min_f)
obj_opt,a_Opt,b_opt,c_opt = min_f[ind],A[ind],B[ind],C[ind]