我需要为每种产品(例如 A、B、C)找到最佳折扣,以便我可以最大限度地提高总销售额。我有每个产品的现有随机森林模型,将折扣和季节映射到销售。我如何组合这些模型并将它们提供给优化器以找到每个产品的最佳折扣?
选型理由:
输入数据:用于在产品级别构建模型的示例数据。数据一览如下:

我遵循的想法/步骤:
# 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)
sudo/示例代码# …
python optimization machine-learning mathematical-optimization particle-swarm
我在R中检查一个简单的移动平均交叉策略而不是对2维参数空间(长期移动平均长度,长期移动平均长度)进行大量模拟,我想实现粒子群优化算法,以找到最佳参数值.我一直在浏览网页,并且正在阅读这个算法非常有效.此外,算法的工作方式让我着迷......
你们中的任何人都有在R中实现这个算法的经验吗?是否有可用的有用包装?
非常感谢您的评论.
马丁
我有一个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)
什么应该是正确的方法?那么,我最终应该采用哪个权重集,以及如何说网络已经过培训?我知道由于它们的随机性而导致的进化算法永远不会给出相同的答案,但是我如何确保网络已经过训练?应该有义务澄清.
我需要在R环境中使用PSO算法训练神经网络.我已经知道关于神经网络(神经网络,AMORE等)的所有R包,但其中没有一个包括PSO训练(仅反向传播).
想法?谢谢您的帮助.
我用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) 我想知道在使用弹性传播训练之前是否使用遗传算法,粒子群优化和模拟退火训练前馈神经网络确实可以改善结果.
这是我正在使用的代码:
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
我编写了一个主函数,它使用随机优化算法(粒子群优化)来找到 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) 我在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表示粒子位置的类
同样明智的其他课程在这里
我知道每个粒子都是特定功能的解决方案,每个粒子和群体都在不断寻找最佳解决方案.如果在第一次迭代后发现全局最佳,并且没有新的粒子被添加到混合中,那么循环是否应该退出并且第一个全局最佳找到的是最合适的解决方案?如果是这种情况,那么PSO比仅仅迭代列表更好.
我正在学习用于自动分组用户的优化算法.但是,我对这些算法完全陌生,我在回顾相关文献时听说过它们.而且,不同的是,在其中一篇文章中,作者使用整数编程实现了他们自己的算法(基于他们自己的逻辑)(这就是我所知道的IP).
我想知道是否需要使用混合整数线性编程实现遗传/粒子群(或任何其他优化)算法,或者这只是其中一个选项.最后,我需要构建一个基于Web的系统,自动对用户进行分组.我感谢任何帮助.
optimization linear-programming genetic-algorithm particle-swarm integer-programming
particle-swarm ×11
c++ ×2
matlab ×2
optimization ×2
r ×2
algorithm ×1
benchmarking ×1
encog ×1
java ×1
julia ×1
numerical ×1
porting ×1
python ×1