工序工时由该工序的工艺参数决定,有了工时后乘以固定因子就是计件工资。一般参考本地小时公式以及同类小时工资并考虑作业的风险等因素给出固定因子
下面是样本数据:
注意样本数据要近可能全面,比方这里会交换L与R后做为另一组样本数据一起交给系统训练
打钩的数据会抽取来训练,WTime是目标,所以5个输入1个输出。
训练代码
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个打钩的文件要发布到生产环境中
下面是需要封成dll的函数,里面采用了绝对路径,因为分装成Windows Service后matlab的工作目录会在C盘下的临时目录
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]; endView Code
下面是在matlab环境下厕所封装的函数
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