标签: particle-swarm

如何建立 RF(随机森林)和 PSO(粒子群优化器)的混合模型以找到产品的最佳折扣?

我需要为每种产品(例如 A、B、C)找到最佳折扣,以便我可以最大限度地提高总销售额。我有每个产品的现有随机森林模型,将折扣和季节映射到销售。我如何组合这些模型并将它们提供给优化器以找到每个产品的最佳折扣?

选型理由:

  1. RF:它能够在预测变量和响应(sales_uplift_norm)之间提供更好的(wrt 线性模型)关系。
  2. PSO:在许多白皮书中建议(可在 researchgate/IEEE 获得),还有这里这里的python 包的可用性。

输入数据:用于在产品级别构建模型的示例数据。数据一览如下: 在此处输入图片说明

我遵循的想法/步骤:

  1. 为每个产品建立射频模型
    # pre-processed data
    products_pre_processed_data = {key:pre_process_data(df, key) for key, df in df_basepack_dict.items()}
    # rf models
    products_rf_model = {key:rf_fit(df) for key, df in products_pre_processed_data .items()}
Run Code Online (Sandbox Code Playgroud)
  • 将模型传递给优化器
    • 目标函数:最大化sales_uplift_norm(RF模型的响应变量)
    • 约束:
      • 总支出(A + B + C <= 20 的支出),支出 = total_units_sold_of_products * discount_percentage * mrp_of_products
      • 产品下限(A, B, C): [0.0, 0.0, 0.0] # 折扣百分比下限
      • 产品上限(A, B, C): [0.3, 0.4, 0.4] # 折扣百分比上限

sudo/示例代码# …

python optimization machine-learning mathematical-optimization particle-swarm

12
推荐指数
1
解决办法
478
查看次数

R中粒子群优化算法的实现

我在R中检查一个简单的移动平均交叉策略而不是对2维参数空间(长期移动平均长度,长期移动平均长度)进行大量模拟,我想实现粒子群优化算法,以找到最佳参数值.我一直在浏览网页,并且正在阅读这个算法非常有效.此外,算法的工作方式让我着迷......

你们中的任何人都有在R中实现这个算法的经验吗?是否有可用的有用包装?

非常感谢您的评论.

马丁

r mathematical-optimization particle-swarm

9
推荐指数
1
解决办法
1万
查看次数

粒子群优化训练神经网络的概念问题

我有一个4输入和3输出神经网络,通过粒子群优化(PSO)训练,均方误差(MSE)作为适应度函数,使用MATLAB提供的IRIS数据库.适应度函数评估50次.该实验是对特征进行分类.我有些疑惑

(1)PSO迭代/世代是否评估适应度函数的次数?

(2)在很多论文中训练曲线我已经看到MSE与世代的训练曲线是情节.在图中,左侧的图(a)是与NN类似的模型.它是一个4输入0隐藏的第3层输出认知图.并且图(b)是由相同PSO训练的NN.本文的目的是展示新模型在(a)中对NN的有效性.

但他们提到实验进行说Cycles = 100次,Generations = 300.在这种情况下,(a)和(b)的训练曲线应该是MSE vs Cycles而不是MSE vs PSO世代?例如,Cycle1:PSO迭代1-50 - >结果(Weights_1,Bias_1,MSE_1,Classification Rate_1).Cycle2:PSO迭代1-50 - >结果(Weights_2,Bias_2,MSE_2,Classification Rate_2),依此类推100个周期.为什么(a),(b)中的X轴不同,它们是什么意思?

(3)最后,对于程序的每次独立运行(通过控制台独立运行m文件几次),我从未获得相同的分类率(CR)或相同的权重集.具体地说,当我第一次运行程序时,我得到W(权重)值,CR = 100%.当我再次运行Matlab代码程序时,我可能得到CR = 50%和另一组权重!如下例所示,

%Run1 (PSO generaions 1-50) 
>>PSO_NN.m

Correlation =

     0

Classification rate = 25



FinalWeightsBias =

   -0.1156    0.2487    2.2868    0.4460    0.3013    2.5761

%Run2 (PSO generaions 1-50) 
>>PSO_NN.m
Correlation =

     1

Classification rate = 100

%Run3 (PSO generaions 1-50) 
>>PSO_NN.m
Correlation =

   -0.1260

Classification rate = 37.5

    FinalWeightsBias =

   -0.1726    0.3468    0.6298   -0.0373    0.2954   -0.3254
Run Code Online (Sandbox Code Playgroud)

什么应该是正确的方法?那么,我最终应该采用哪个权重集,以及如何说网络已经过培训?我知道由于它们的随机性而导致的进化算法永远不会给出相同的答案,但是我如何确保网络已经过训练?应该有义务澄清.

matlab machine-learning neural-network particle-swarm

6
推荐指数
1
解决办法
1143
查看次数

R中使用PSO的神经网络训练

我需要在R环境中使用PSO算法训练神经网络.我已经知道关于神经网络(神经网络,AMORE等)的所有R包,但其中没有一个包括PSO训练(仅反向传播).

想法?谢谢您的帮助.

r neural-network particle-swarm

5
推荐指数
1
解决办法
903
查看次数

My Particle Swarm Optimization代码在C++和MATLAB中生成不同的答案

我用C++编写了粒子群优化算法的全球版本.我试着把它写成与我之前编写的MATLAB PSO代码完全相同,但是这段代码产生了不同的,所以最糟糕的答案.MATLAB代码是:

clear all;

numofdims = 30;
numofparticles = 50;
c1 = 2;
c2 = 2;
numofiterations = 1000;
V = zeros(50, 30);
initialpop = V;
Vmin = zeros(30, 1);
Vmax = Vmin;
Xmax = ones(30, 1) * 100;
Xmin = -Xmax;
pbestfits = zeros(50, 1);
worsts = zeros(50, 1);
bests = zeros(50, 1);
meanfits = zeros(50, 1);
pbests = zeros(50, 30);

initialpop = Xmin + (Xmax - Xmin) .* rand(numofparticles, numofdims);

X = initialpop;
fitnesses = testfunc1(X);
[minfit, minfitidx] …
Run Code Online (Sandbox Code Playgroud)

c++ matlab porting mathematical-optimization particle-swarm

5
推荐指数
1
解决办法
1万
查看次数

使用多种训练方法训练ANN与Encog

我想知道在使用弹性传播训练之前是否使用遗传算法,粒子群优化和模拟退火训练前馈神经网络确实可以改善结果.

这是我正在使用的代码:

                    CalculateScore score = new TrainingSetScore(trainingSet);
                    StopTrainingStrategy stop = new StopTrainingStrategy();
                    StopTrainingStrategy stopGA = new StopTrainingStrategy();
                    StopTrainingStrategy stopSIM = new StopTrainingStrategy();
                    StopTrainingStrategy stopPSO = new StopTrainingStrategy();

                    Randomizer randomizer = new NguyenWidrowRandomizer();
                    //Backpropagation train = new Backpropagation((BasicNetwork) network, trainingSet, 0.2, 0.1);
                    //  LevenbergMarquardtTraining train = new LevenbergMarquardtTraining((BasicNetwork) network, trainingSet);
                    int population = 500;
                    MLTrain trainGA =  new MLMethodGeneticAlgorithm(new MethodFactory(){
                        @Override
                        public MLMethod factor() {
                            final BasicNetwork result = createNetwork();
                            ((MLResettable)result).reset();
                            return result;
                        }}, score,population);


                    Date dStart = new Date();

                    int …
Run Code Online (Sandbox Code Playgroud)

simulated-annealing neural-network genetic-algorithm particle-swarm encog

5
推荐指数
1
解决办法
888
查看次数

为什么我的 Julia 代码随着迭代次数的增加而变慢?

我编写了一个主函数,它使用随机优化算法(粒子群优化)来找到 ODE 系统的最优解。我会运行 50 次以确保找到最优的。起初运行正常,但现在我发现计算时间会随着迭代次数的增加而增加。前十次计算花费不到300s,但最后计算会增加到500s。看来每次计算都会多花3~5秒的时间。我已按照高性能提示来优化我的代码,但它不起作用。

抱歉,我之前不太清楚如何上传我的代码,这是我在下面编写的代码。但是在这段代码中,实验数据没有加载,我可能需要想办法上传数据。在 main 函数中,随着i的增加,每次计算的时间成本也在增加。

哦,对了,我还发现了一个有趣的现象。我改变了计算次数,计算时间又变了。主循环前20次计算,每次计算耗时约300秒,内存使用波动较大。但我不知道的事情发生了,它正在加速。每次计算时间减少1/4,约为80s。内存使用量变成了这样的一条直线:

内存使用情况

我知道 Julia 会在第一次运行时进行预热,然后加速。但这种情况似乎有所不同。这种情况看起来 Julia 在前 20 次计算中运行缓慢,然后它找到了一个优化内存使用并加快速度的好方法。然后程序就全速运行。

using CSV, DataFrames
using BenchmarkTools
using DifferentialEquations
using Statistics
using Dates
using Base.Threads
using Suppressor

function uniform(dim::Int, lb::Array{Float64, 1}, ub::Array{Float64, 1})
    arr = rand(Float64, dim)
    @inbounds for i in 1:dim; arr[i] = arr[i] * (ub[i] - lb[i]) + lb[i] end
    return arr
end

mutable struct Problem
    cost_func
    dim::Int
    lb::Array{Float64,1}
    ub::Array{Float64,1}
end

mutable struct Particle
    position::Array{Float64,1}
    velocity::Array{Float64,1}
    cost::Float64
    best_position::Array{Float64,1}
    best_cost::Float64
end

mutable struct …
Run Code Online (Sandbox Code Playgroud)

benchmarking particle-swarm julia

5
推荐指数
1
解决办法
200
查看次数

C++中的粒子群优化算法

我需要在C++中实现PSO算法.有没有我可以用来开始的C++库?

c++ particle-swarm

3
推荐指数
1
解决办法
7275
查看次数

粒子群优化算法

我在java中使用粒子群优化(PSO).我对我们的工作知之甚少.因为,我正在申请生物信息学中的多序列比对.

我们需要找到对齐这些序列的位置和速度.我需要有关PSO的详细解释和参考,以及计算PSO中速度和位置的需要.如果可能的话,我需要在java中解释PSO的简单示例.实际上,我需要了解它如何优化问题.

public class Position {
 private double x;
 private double y;

 public Position(double x, double y) {
 this.x = x;
 this.y = y;
 }

 public double getX() {
 return x;
 }

 public void setX(double x) {
 this.x = x;
 }

 public double getY() {
 return y;
 }

 public void setY(double y) {
 this.y = y;
 }
}
Run Code Online (Sandbox Code Playgroud)

这是用getter和setter表示粒子位置的类

同样明智的其他课程在这里

java numerical particle-swarm

1
推荐指数
1
解决办法
7139
查看次数

粒子群优化如何达到最终解决方案?

我知道每个粒子都是特定功能的解决方案,每个粒子和群体都在不断寻找最佳解决方案.如果在第一次迭代后发现全局最佳,并且没有新的粒子被添加到混合中,那么循环是否应该退出并且第一个全局最佳找到的是最合适的解决方案?如果是这种情况,那么PSO比仅仅迭代列表更好.

algorithm mathematical-optimization particle-swarm

1
推荐指数
1
解决办法
1120
查看次数

用于实现优化算法的混合整数线性规划(例如,遗传或粒子群)

我正在学习用于自动分组用户的优化算法.但是,我对这些算法完全陌生,我在回顾相关文献时听说过它们.而且,不同的是,在其中一篇文章中,作者使用整数编程实现了他们自己的算法(基于他们自己的逻辑)(这就是我所知道的IP).

我想知道是否需要使用混合整数线性编程实现遗传/粒子群(或任何其他优化)算法,或者这只是其中一个选项.最后,我需要构建一个基于Web的系统,自动对用户进行分组.我感谢任何帮助.

optimization linear-programming genetic-algorithm particle-swarm integer-programming

1
推荐指数
1
解决办法
457
查看次数