gufengshou1 1 rok temu
rodzic
commit
27d57c0f9c

+ 21 - 7
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/container/PidLambdaContainer.java

@@ -123,14 +123,8 @@ public class PidLambdaContainer {
                         conversion=1d;
                     }
                     latestRealCPA=realCost/conversion;
-                    et=cpa-latestRealCPA;
-                    sumE=cacheItem.sumError+et;
-                    ve=et-(cpa-cacheItem.latestRealCpa);
-                    lambdaNew=kp*et+ki*sumE+kd*ve;
+                    lambdaNew =cacheItem.calculate(kp,ki,kd,cpa,latestRealCPA);
 
-                    if(cpa+lambdaNew<=1) {
-                        lambdaNew=cpa-1;
-                    }
                     cacheItem.lambda=lambdaNew;
                     cacheItem.latestRealCpa=latestRealCPA;
                     cacheItem.sumError=sumE;
@@ -214,5 +208,25 @@ public class PidLambdaContainer {
         public double sumError=0d;
 
         public double latestRealCpa=0d;
+
+        private double processVariable; // 处理变量
+        private double integral; // 积分项
+        private double lastError; // 上一个误差
+
+        public double calculate(double kp, double ki, double kd, double setPoint,double currentValue) {
+            processVariable = currentValue;
+            double error = setPoint - processVariable;
+
+            integral += error;
+            double derivative = (error - lastError) / 1; // 假设采样间隔为1
+            lastError = error;
+            return kp * error + ki * integral + kd * derivative;
+        }
+
+
+        public void reset() {
+            integral = 0;
+            lastError = 0;
+        }
     }
 }