随机搜索到lambda表达式

感谢你们的所有帮助和分享。

我的问题是关于随机搜索的。这种技术通过在一般情况下进行数学计算的定义数量的循环来近似数据。请看以下代码,我尽量将其简化到最低限度。我的期望是将这段代码设置为lambda表达式,特别是for循环,我希望它能达到最佳性能。我有一些尝试,但不确定是否已经充分利用了它。

package stochasticsearch;import java.util.Random;public class StochasticSearch {    public static double f(double x) {        return -(x - 1) * (x - 1) + 2;    }    public static void main(String[] args) {        final Random random = new Random();        double startPointX = 0;        double max = f(startPointX);        long begin = System.currentTimeMillis();        for (int i = 0; i < 1000000000; i++) {            double index = 2 * random.nextDouble();            if (f(index) > max) {                max = f(index);            }        }        System.out.println("Elapsed time: " + (System.currentTimeMillis() - begin));        System.out.println("Maximum value y=f(x) is " + max);    }}

谢谢,祝你有美好的一天。


回答:

在我的系统上,你的代码大约在23秒内完成,我对其进行了修改,使其在2秒内完成。以下是我发现的:

  • 你使用了Random,而你可以使用ThreadLocalRandom来代替;这种转换会带来相对较大的速度提升。
  • 在某些情况下,你在for循环中两次计算了f(index),而它应该在每次迭代中只计算一次。
  • 由于你是在一个大的值范围内进行迭代,你可以使用并行流;这也将带来相对较大的速度提升。
  • 你在f中的每个结果上都加了2,所以最好在计算出max后一次性加上它。

    public static double f(double x) {    double y = x - 1;    return -y * y;}public static void main(String[] args) {    final ThreadLocalRandom random = ThreadLocalRandom.current();    long begin = System.currentTimeMillis();    double max = IntStream.range(0, 1_000_000_000)                          .parallel()                          .mapToDouble(i -> f(random.nextDouble() * 2))                          .max()                          .orElse(f(0)) + 2;    System.out.println("Elapsed time: " + (System.currentTimeMillis() - begin));    System.out.println("Maximum value y=f(x) is " + max);}

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注