matlab 计算工时,C# + Matlab 实现计件工时拟合

工序工时由该工序的工艺参数决定,有了工时后乘以固定因子就是计件工资。一般参考本地小时公式以及同类小时工资并考虑作业的风险等因素给出固定因子

下面是样本数据:

注意样本数据要近可能全面,比方这里会交换L与R后做为另一组样本数据一起交给系统训练

e795933c556badd5ddcd68296983472a.png

打钩的数据会抽取来训练,WTime是目标,所以5个输入1个输出。

训练代码

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

clc

clear

excel=xlsread('frmZJ_KB_SalaryParamAdmin2011140841.xls');

% 训练集——个样本

P_Train=excel(:,[4 5 11 7 8])'; %注意运算时需要转置矩阵

T_Train=excel(:,9)';

% 测试集——个样本

rndSample=randperm(size(excel,1),500); %随机选择100个作为样本

P_Test=P_Train(:,rndSample);

T_Test=T_Train(:,rndSample);

%% III. 数据归一化

[p_train, ps_input] = mapminmax(P_Train,0,1);

p_test = mapminmax('apply',P_Test,ps_input);

save('ps_input.mat','ps_input');

[t_train, ps_output] = mapminmax(T_Train,0,1);

save('ps_output.mat','ps_output')

N = size(P_Test,2);

%% IV. BP神经网络创建、训练及仿真测试

%%

% 1. 创建网络

net = newff(p_train,t_train,60);

%%

% 2. 设置训练参数

net.trainParam.epochs = 10000;

net.trainParam.goal = 1e-5;

net.trainParam.lr = 0.01;

%%

% 3. 训练网络

net = train(net,p_train,t_train);

save('ZJPrediction.mat','net');

%%

% 4. 仿真测试

t_sim = sim(net,p_test);

%%

% 5. 数据反归一化

T_sim = mapminmax('reverse',t_sim,ps_output);

%% V. 性能评价

%%

% 1. 相对误差error

error = abs(T_sim - T_Test)./T_Test;

%%

% 2. 决定系数R^2

R2 = (N * sum(T_sim .* T_Test) - sum(T_sim) * sum(T_Test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_Test).^2) - (sum(T_Test))^2));

%%

% 3. 结果对比

result = [T_Test' T_sim' error']

%% VI. 绘图

figure

plot(1:N,T_Test,'b:*',1:N,T_sim,'r-o')

legend('真实值','预测值')

xlabel('预测样本')

ylabel('输出值')

string = {'测试集预测结果对比';['R^2=' num2str(R2)]};

title(string)

View Code

训练号的模型要保存起来,还有归一化参数,下面3个打钩的文件要发布到生产环境中

8ba22093fb6596a1fea90b74ee23d050.png

下面是需要封成dll的函数,里面采用了绝对路径,因为分装成Windows Service后matlab的工作目录会在C盘下的临时目录

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

function r=PredictionZJWTime(d)

load('D:\MatlabServer\ps_input.mat','ps_input');

load('D:\MatlabServer\ps_output.mat','ps_output');

load('D:\MatlabServer\ZJPrediction.mat','net');

P_Test=d';

p_test = mapminmax('apply',P_Test,ps_input);

%%

% 4. 仿真测试

t_sim = sim(net,p_test);

%%

% 5. 数据反归一化

T_sim = mapminmax('reverse',t_sim,ps_output);

r=[d T_sim' T_sim'*0.0062];

end

View Code

下面是在matlab环境下厕所封装的函数

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

clc

clear

excel=xlsread('frmZJ_KB_SalaryParamAdmin2011120839.xls');

% 训练集——个样本

P_Train=excel(:,[4 5 11 7 8])'; %注意运算时需要转置矩阵

T_Train=excel(:,9)';

% 测试集——个样本

rndSample=randperm(size(excel,1),100); %随机选择100个作为样本

P_Test=P_Train(:,rndSample);

T_Test=T_Train(:,rndSample);

T_Sim=PredictionZJWTime(P_Test');

T_Sim(:,6) - T_Test'

View Code

标签:ps,C#,%%,Train,Matlab,计件,Test,net,sim

来源: https://www.cnblogs.com/wdfrog/p/13983698.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值