Tag: 数学优化

加快Java中的数学计算

我有一个用Java编写的神经网络,它使用如下定义的sigmoid传递函数: private static double sigmoid(double x) { return 1 / (1 + Math.exp(-x)); } 这在使用网络进行训练和计算的过程中被多次调用。 有没有办法加速这个? 这并不是说它很慢,只是它被大量使用,所以这里的一个小优化将是一个很大的整体收益。

如何以有效的方式调整图像处理算法的参数?

在为我的问题开始实施解决方案之前,我只想确定我是否会“重新发明轮子”,如果我可以重复使用以前曾做过的工作。 所以我的问题是: 我使用OpenCV库制作了图像匹配器。 此匹配器接收一组图像文件,并尝试在数据库中查找类似的图像。 最后,它根据ROC曲线定义(真阳性,真阴性,假阳性和假阴性匹配数)返回统计结果。 由于OpenCV的库算法参数值大约为10,因此这些结果可能会有所不同。这意味着参数调整将带来更多的True Positive匹配和更少的False Positive匹配。 由于我必须调整或多或少10个参数,powershell调节器将非常缓慢。 蛮力我的意思是: While(param1 < 50){ While(param2 < 50){ While(param3 < 50){ … PerformMatching(); param3 +=2; } param2++; } pram1 +=5; } 我想要做的是随机选择参数,然后分析统计结果是否变得更好。 然后这个分析将有助于改变随机生成参数的方法,以便选择更好的参数。 所以我的问题是,如果Java中有库或者是否有任何AI算法,它将根据True Positive和False Positive值的评估返回更好的参数集? 可以感谢一些帮助,谢谢。

用于大输入的Java优化算术和赋值运算符

我有一段代码必须在时钟速度方面运行得非常快。 该算法已经在O(N)中。 它需要2秒,需要1秒。 对于大多数A.length输入~100,000,除非特定行代码被调用极限次数,否则需要.3s。 (对于深奥的编程挑战) 它使用1,2,… N – > 1,3,4,10,15 ..的算术系列的计算,可以用n *(n + 1)/ 2 I循环通过这个等式数百个成千上万次。 我无法访问输入,也无法显示它。 我能够返回的唯一信息是运行所花费的时间。 特别是等式是: s+=(n+c)-((n*(n+1))/2); s和c的值可以是0到10亿 n可以是0到100,000 在时钟速度方面写这个语句最有效的方法是什么? 我听说除法需要更多的时间然后乘法,但除此之外我无法确定在一行或多个赋值行中写这个是否更有效。 除以乘法再乘以然后除以? 还会创建自定义整数类型显着帮助吗? 根据请求编辑,带有小输入案例的完整代码(对不起,如果它很难看,我只是继续剥离它): public static void main(String[] args) { int A[]={3,4,8,5,1,4,6,8,7,2,2,4};//output 44 int K=6; //long start = System.currentTimeMillis();; //for(int i=0;i<100000;i++){ System.out.println(mezmeriz4r(A,K)); //} //long end = System.currentTimeMillis();; // System.out.println((end – start) + […]

Scala遗传算法(GA)库中的模拟二进制交叉(SBX)交叉算子

我在一个很小的研究团队工作,用Scala创建/改编遗传算法库,用于使用Scientific Worklow System进行分布式计算,在我们的例子中,我们使用开源OpenMole软件( http://www.openmole.org/ )。 最近,我尝试理解并重新实现在JMetal Metaheuristics库( http://jmetal.sourceforge.net/ )中编写的SBX交叉运算符,以使其在我们的Scala库中的function版本中进行调整。 我写了一些代码,但是我需要我们的建议或者你对在Java库中定义的SBX的validation,因为源代码( svn中的src )看起来不像这里写的原始等式: http : //citeseerx.ist。 psu.edu/viewdoc/download?doi=10.1.1.33.7291&rep=rep1&type=pdf ,第30页,附件A 第一个问题,我不了解JMetal的java版本,为什么他们使用两个不同的beta值? beta1在方程中使用min [(y1-yL),…]和的第一个arg 使用min […,(yu – y2)]的第二个arg的beta2 ) Beta 1和2用于计算alpha值和2(所以这里和jmetal我们还有两个alpha不同的值alpha1和2)… 同样的问题/问题,我们在jmetal两个计算betaq (java代码)或Deb方程,结果: 第二个问题,符号的含义是什么 用于(2)和(3)程序中的SBX伪算法,与简单β的区别? 特别是当我们想要计算交叉父母的孩子/后代时,就像这里: 编辑 更正no-op if / else块 jmetal中的代码作者给了我Nsga-II算法原始源代码的链接,他解释我Deb的SBX描述与他的实现不同:/ http://www.iitk.ac.in/kangal/codes.shtml 我不明白jmetal和原始源代码中的描述和实现之间的区别,你有解释吗? 正确if / else返回map 开始翻译成scala class SBXBoundedCrossover[G <: GAGenome, F Double = _.nextDouble) extends CrossOver [G, […]

如何使用约束编程优化购物篮?

我有一份我想买的物品清单。 这些物品由不同的商店和不同的价格提供。 商店有个人送货费用。 我正在寻找最优购物策略(以及支持它的java库)以最低的总价格购买所有商品。 例: Shop1在Shop1以100美元的价格在Shop2以111美元的价格提供。 商品2在Shop1以90美元的价格在Shop2以85美元的价格提供。 Shop1的运费:如果总订单<$ 150,则需要10美元; 否则为$ 0 Shop2的运费:如果总订单<$ 50则需要5美元; 否则为$ 0 如果我在Shop1购买Item1和Item2,总成本为100美元+ 90美元+ 0美元= 190美元。 如果我在Shop2购买Item1和Item2,总成本为111美元+ 85美元+ 0美元= 196美元。 如果我在Shop1购买Item1,在Shop2购买Item2,则总成本为100美元+ 10美元+ 85美元+ 0美元= 195美元。 如果我在Shop1订购Item1和Item2:190美元,我会得到最低价格 到目前为止我尝试了什么 之前我问了另一个问题 ,这让我进入了约束编程领域。 我看了一下奶油和巧克力 ,但我没弄明白如何创建一个模型来解决我的问题。 | shop1 | shop2 | shop3 | … —————————————– item1 | p11 | p12 | p13 | item2 | p21 | […]

k-shortest(替代)路径算法,java实现

你能推荐任何实现k-shortest算法的java库 – >搜索替代方法,而不是定向多图中唯一最短的方法吗? 我发现只有JGraphT,但实际上有bug(我提交了)但是我需要花很多时间修复它,是否有其他可用的实现? 除了JGraphT,我发现只有小型单人项目:/ 或者很难修改Disjktra最短路径alg以显示替代路径? 谢谢

Java库? – 单工/线性编程/优化

我正在寻找一个优化库。 我的两个要求是它不使用JNI,并且它没有许可证限制,因此无法在商业上在多台计算机上使用它。 我发现唯一符合这些要求的是巧克力,但它有多大的错误。

用数值方法求解非线性方程组

我需要在我的Java程序中解决非线性最小化(N个未知数的最小残差平方)问题。 解决这些问题的常用方法是Levenberg-Marquardt算法。 我有一些问题 有没有人对不同的LM实现有经验? LM的味道略有不同,我听说算法的确切实现对其数值稳定性有重要影响。 我的function非常好,所以这可能不是问题,但当然我想选择一个更好的选择。 以下是我发现的一些替代方案: FPL统计小组的非线性优化Java包 。 这包括经典Fortran MINPACK例程的Java转换。 JLAPACK ,另一个Fortran翻译。 优化算法工具包 。 Javanumerics 。 一些Python实现。 纯Python很好,因为它可以用jythonc编译成Java。 是否有任何常用的启发式方法来进行LM所需的初始猜测? 在我的应用程序中,我需要对解决方案设置一些约束,但幸运的是它们很简单:我只是要求解决方案(为了成为物理解决方案)是非负的。 稍微负面的解决方案是数据中测量不准确的结果,显然应该为零。 我正在考虑使用“常规”LM但迭代,以便如果一些未知数变为负数,我将其设置为零并从中解决其余部分。 真正的数学家可能会嘲笑我,但你认为这可行吗? 感谢您的任何意见! 更新 :这不是火箭科学,要解决的参数数量(N)最多为5,数据集几乎不足以使解决成为可能,所以我相信Java足以解决这个问题。 而且我相信聪明的应用数学家已经多次解决了这个问题,所以我只是在寻找一些现成的解决方案,而不是自己做饭。 例如,如果它是纯Python,Scipy.optimize.minpack.leastsq可能会没问题。

实现背包的分支和绑定

对于b&b背包问题,我很难实现这个(糟糕的)伪java代码 (我想知道:为什么人们会那么做?)。 这是我到目前为止的实现,它最多输出80(当它应该打印90,对于教科书样本中的项目)。 我创建了一个比较器(在LinkedList上),在将元素传递给算法之前,按Pi / Wi对元素进行排序,但此输入已经预先排序。 我正在调试(并更新发布的代码),因为我猜这是一个数组索引问题……或者边界函数是否有错误? 输入: 4 16 //# items maxWeight 40 2 // profit weight 30 5 50 10 10 5 class Node { int level; int profit; int weight; double bound; } public class BranchAndBound { static int branchAndBound (LinkedList items, int W) { int n = items.size(); int [] p= […]