Ver Fonte

feat:debug

zhaohaipeng há 11 meses atrás
pai
commit
9028086122

+ 303 - 179
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VideoAdThompsonScorerV2.java

@@ -25,104 +25,158 @@ public class VideoAdThompsonScorerV2 {
     @Autowired
     private AlgorithmRedisHelper redisHelper;
     // redis:cid_action:{$cid}
-    private String redisCreativeStatisticsPrefix="redis:cid_action:";
-    //redis:vid_cid_action:{$vid}_{$cid}
-    private String redisVideoCreativeStatisticsPrefix="redis:vid_cid_action:";
+    private String redisCreativeStatisticsPrefix = "redis:cid_action:";
+    // redis:vid_cid_action:{$vid}_{$cid}
+    private String redisVideoCreativeStatisticsPrefix = "redis:vid_cid_action:";
 
     private String rediCidActionKeyV1 = "redis:cid_action_v1:";
     private String rediCidVidActionKeyV1 = "redis:vid_cid_action_v1:";
 
-    private Map<String,Double> exp663Param=new HashMap<>();
-    private Map<String,Double> exp664Param=new HashMap<>();
-    private Map<String,Double> exp665Param=new HashMap<>();
-    private Map<String,Double> exp666Param=new HashMap<>();
-    private Map<String,Double> exp669Param=new HashMap<>();
-    private Map<String,Double> exp670Param=new HashMap<>();
-
-    Random random=new Random();
-    Gson gson=new Gson();
-    public List<AdRankItem> thompsonScorerByExp663(ScoreParam param, List<AdPlatformCreativeDTO> adIdList){
-        List<AdRankItem> result=new LinkedList<>();
-        String jsonStr;
-        CreativeStatistic statistic = null;
-        List<String> redisKey=new LinkedList<>();
-        adIdList.forEach(creativeDTO -> {
-            redisKey.add(redisCreativeStatisticsPrefix+creativeDTO.getCreativeId());
-        });
-        List<String> values=redisHelper.getValues(redisKey);
-        double score=0d;
-        int i=0;
-        for(AdPlatformCreativeDTO dto:adIdList){
-            AdRankItem item=new AdRankItem();
-            item.setVideoId(param.getVideoId());
-            item.setCpa(dto.getCpa());
-            item.setAdId(dto.getCreativeId());
-            try {
-                jsonStr=values.get(i);
-                if(jsonStr==null){
-                    score = exp663Param.getOrDefault("randomMin",0.000001)
-                            + (random.nextDouble() *
-                            (exp663Param.getOrDefault("randomMax",0.00001 ) - exp663Param.getOrDefault("randomMin",0.000001 )));
-                }else {
-                    statistic =gson.fromJson(jsonStr,CreativeStatistic.class);
-                    score = (exp663Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()))
-                            / (exp663Param.getOrDefault("beta",10000d)+Long.parseLong(statistic.getExp())) ;
-                }
-                double s1 = score;
-                score=score*dto.getCpa()*dto.getBid1()*dto.getBid2();
+    private Map<String, Double> exp663Param = new HashMap<>();
+    private Map<String, Double> exp664Param = new HashMap<>();
+    private Map<String, Double> exp665Param = new HashMap<>();
+    private Map<String, Double> exp666Param = new HashMap<>();
+    private Map<String, Double> exp669Param = new HashMap<>();
+    private Map<String, Double> exp670Param = new HashMap<>();
+
+    Random random = new Random();
+    Gson gson = new Gson();
+
+    // public List<AdRankItem> thompsonScorerByExp663(ScoreParam param, List<AdPlatformCreativeDTO> adIdList) {
+    //     List<AdRankItem> result = new LinkedList<>();
+    //     String jsonStr;
+    //     CreativeStatistic statistic = null;
+    //     List<String> redisKey = new LinkedList<>();
+    //     adIdList.forEach(creativeDTO -> {
+    //         redisKey.add(redisCreativeStatisticsPrefix + creativeDTO.getCreativeId());
+    //     });
+    //     List<String> values = redisHelper.getValues(redisKey);
+    //     double score = 0d;
+    //     int i = 0;
+    //     for (AdPlatformCreativeDTO dto : adIdList) {
+    //         AdRankItem item = new AdRankItem();
+    //         item.setVideoId(param.getVideoId());
+    //         item.setCpa(dto.getCpa());
+    //         item.setAdId(dto.getCreativeId());
+    //         try {
+    //             jsonStr = values.get(i);
+    //             if (jsonStr == null) {
+    //                 score = exp663Param.getOrDefault("randomMin", 0.000001)
+    //                         + (random.nextDouble() *
+    //                         (exp663Param.getOrDefault("randomMax", 0.00001) - exp663Param.getOrDefault("randomMin", 0.000001)));
+    //             } else {
+    //                 statistic = gson.fromJson(jsonStr, CreativeStatistic.class);
+    //                 score = (exp663Param.getOrDefault("alpha", 1d) + Long.parseLong(statistic.getOrder()))
+    //                         / (exp663Param.getOrDefault("beta", 10000d) + Long.parseLong(statistic.getExp()));
+    //             }
+    //             double s1 = score;
+    //             score = score * dto.getCpa() * dto.getBid1() * dto.getBid2();
+    //
+    //             Map<String, Object> ext = this.extMap(statistic, "663", dto.getCpa(), null,
+    //                     exp663Param.getOrDefault("alpha", 1d), exp663Param.getOrDefault("beta", 10000d), null);
+    //             ext.put("s1", s1);
+    //             item.setExt(ext);
+    //             item.setScore(score);
+    //             item.setScore_type(663);
+    //         } catch (Exception e) {
+    //             log.error("svc=thompsonScorerByExp663 {}", gson.toJson(e.getStackTrace()));
+    //         }
+    //         result.add(item);
+    //         i++;
+    //     }
+    //     Collections.sort(result);
+    //     return result;
+    // }
+
+    public List<AdRankItem> thompsonScorerByExp663(ScoreParam param, List<AdPlatformCreativeDTO> adIdList) {
+        List<AdRankItem> result = new LinkedList<>();
+        Map<Long, CreativeStatistic> creativeStatisticsMap = this.batchFindCreativeRedisCache(redisCreativeStatisticsPrefix, adIdList);
+
+        double alpha = exp663Param.getOrDefault("alpha", 0d);
+        double beta = exp663Param.getOrDefault("beta", 0d);
 
-                Map<String, Object> ext = this.extMap(statistic, "663", dto.getCpa(), null, exp663Param.getOrDefault("alpha", 1d), exp663Param.getOrDefault("beta", 10000d), null);
-                ext.put("s1", s1);
-                item.setExt(ext);
-                item.setScore(score);
-                item.setScore_type(663);
-            }catch (Exception e){
-                log.error("svc=thompsonScorerByExp663 {}",gson.toJson(e.getStackTrace()));
+        for (AdPlatformCreativeDTO dto : adIdList) {
+            CreativeStatistic cidStatistics = creativeStatisticsMap.getOrDefault(dto.getCreativeId(), new CreativeStatistic());
+
+            double order;
+            double exp;
+            order = cidStatistics.parseOrderToDouble();
+            exp = cidStatistics.parseExpToDouble();
+
+            double s1 = 0.0;
+            double a = order + alpha;
+            double b = exp + beta;
+            if (a != 0 && b != 0) {
+                s1 = a / b;
             }
+
+            double score = s1 * dto.getCpa() * dto.getBid1() * dto.getBid2();
+
+            // 日志上报扩展参数
+            Map<String, Object> ext = new HashMap<>();
+            ext.put("a", alpha);
+            ext.put("b", beta);
+            ext.put("order", order);
+            ext.put("exp", exp);
+            ext.put("s1", s1);
+            ext.put("pairOrSingle", "single");
+            ext.put("cidStatistic", JSON.toJSONString(cidStatistics));
+            ext.put("cpa", dto.getCpa());
+            ext.put("abCode", 663);
+
+            AdRankItem item = new AdRankItem();
+            item.setCpa(dto.getCpa());
+            item.setAdId(dto.getCreativeId());
+            item.setScore(score);
+            item.setExt(ext);
+            item.setVideoId(param.getVideoId());
+            item.setScore_type(663);
             result.add(item);
-            i++;
         }
-        Collections.sort(result);
+
+        result.sort(equalsRandomComparator());
         return result;
     }
-    public List<AdRankItem> thompsonScorerByExp664(ScoreParam param,List<AdPlatformCreativeDTO> adIdList){
-        List<AdRankItem> result=new LinkedList<>();
+
+    public List<AdRankItem> thompsonScorerByExp664(ScoreParam param, List<AdPlatformCreativeDTO> adIdList) {
+        List<AdRankItem> result = new LinkedList<>();
         String jsonStr;
-        CreativeStatistic statistic=null;
-        List<String> redisKey=new LinkedList<>();
+        CreativeStatistic statistic = null;
+        List<String> redisKey = new LinkedList<>();
         adIdList.forEach(creativeDTO -> {
-            redisKey.add(redisVideoCreativeStatisticsPrefix+param.getVideoId()+"_"+creativeDTO.getCreativeId());
+            redisKey.add(redisVideoCreativeStatisticsPrefix + param.getVideoId() + "_" + creativeDTO.getCreativeId());
         });
-        List<String> values=redisHelper.getValues(redisKey);
-        int i=0;
-        double score=0d;
-        for(AdPlatformCreativeDTO dto:adIdList){
-            AdRankItem item=new AdRankItem();
+        List<String> values = redisHelper.getValues(redisKey);
+        int i = 0;
+        double score = 0d;
+        for (AdPlatformCreativeDTO dto : adIdList) {
+            AdRankItem item = new AdRankItem();
             item.setVideoId(param.getVideoId());
             item.setCpa(dto.getCpa());
             item.setAdId(dto.getCreativeId());
             try {
 
-                jsonStr=values.get(i);
-                if(jsonStr==null){
-                    score = exp664Param.getOrDefault("randomMin",0.000001)
+                jsonStr = values.get(i);
+                if (jsonStr == null) {
+                    score = exp664Param.getOrDefault("randomMin", 0.000001)
                             + (random.nextDouble() *
-                            (exp664Param.getOrDefault("randomMax",0.00001 ) - exp664Param.getOrDefault("randomMin",0.000001 )));
-                }else {
-                    statistic =gson.fromJson(jsonStr,CreativeStatistic.class);
-                    score = (exp664Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()))
-                            / (exp664Param.getOrDefault("beta",10000d)+Long.parseLong(statistic.getExp())) ;
+                            (exp664Param.getOrDefault("randomMax", 0.00001) - exp664Param.getOrDefault("randomMin", 0.000001)));
+                } else {
+                    statistic = gson.fromJson(jsonStr, CreativeStatistic.class);
+                    score = (exp664Param.getOrDefault("alpha", 1d) + Long.parseLong(statistic.getOrder()))
+                            / (exp664Param.getOrDefault("beta", 10000d) + Long.parseLong(statistic.getExp()));
                 }
                 double s1 = score;
-                score=score*dto.getCpa()*dto.getBid1()*dto.getBid2();
+                score = score * dto.getCpa() * dto.getBid1() * dto.getBid2();
                 item.setScore(score);
 
-                Map<String, Object> ext = this.extMap(statistic, "664", dto.getCpa(), null, exp663Param.getOrDefault("alpha", 1d), exp663Param.getOrDefault("beta", 10000d), null);
+                Map<String, Object> ext = this.extMap(statistic, "664", dto.getCpa(), null,
+                        exp664Param.getOrDefault("alpha", 1d), exp664Param.getOrDefault("beta", 10000d), null);
                 ext.put("s1", s1);
                 item.setExt(ext);
                 item.setScore_type(664);
-            }catch (Exception e){
-                log.error("svc=thompsonScorerByExp664 {}",gson.toJson(e.getStackTrace()));
+            } catch (Exception e) {
+                log.error("svc=thompsonScorerByExp664 {}", gson.toJson(e.getStackTrace()));
             }
             result.add(item);
             i++;
@@ -131,42 +185,44 @@ public class VideoAdThompsonScorerV2 {
         Collections.sort(result);
         return result;
     }
-    public List<AdRankItem> thompsonScorerByExp665(ScoreParam param,List<AdPlatformCreativeDTO> adIdList){
-        List<AdRankItem> result=new LinkedList<>();
+
+    public List<AdRankItem> thompsonScorerByExp665(ScoreParam param, List<AdPlatformCreativeDTO> adIdList) {
+        List<AdRankItem> result = new LinkedList<>();
         String jsonStr;
         CreativeStatistic statistic = null;
-        List<String> redisKey=new LinkedList<>();
+        List<String> redisKey = new LinkedList<>();
         adIdList.forEach(creativeDTO -> {
-            redisKey.add(redisCreativeStatisticsPrefix+creativeDTO.getCreativeId());
+            redisKey.add(redisCreativeStatisticsPrefix + creativeDTO.getCreativeId());
         });
-        //view/sum(view)
-        List<String> values=redisHelper.getValues(redisKey);
-        int i=0;
-        double score=0d;
-        for(AdPlatformCreativeDTO dto:adIdList){
-            AdRankItem item=new AdRankItem();
+        // view/sum(view)
+        List<String> values = redisHelper.getValues(redisKey);
+        int i = 0;
+        double score = 0d;
+        for (AdPlatformCreativeDTO dto : adIdList) {
+            AdRankItem item = new AdRankItem();
             item.setVideoId(param.getVideoId());
             item.setCpa(dto.getCpa());
             item.setAdId(dto.getCreativeId());
             try {
-                jsonStr=values.get(i);
-                if(jsonStr==null){
-                    score = betaSampler(exp665Param.getOrDefault("alpha",1d),exp665Param.getOrDefault("beta",100000d));
-                }else {
-                    statistic =gson.fromJson(jsonStr,CreativeStatistic.class);
-                    score = betaSampler(exp665Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()) ,
-                            (exp665Param.getOrDefault("beta",100000d)+Long.parseLong(statistic.getExp())))/ (1+exp665Param.getOrDefault("beta_k",9d));
+                jsonStr = values.get(i);
+                if (jsonStr == null) {
+                    score = betaSampler(exp665Param.getOrDefault("alpha", 1d), exp665Param.getOrDefault("beta", 100000d));
+                } else {
+                    statistic = gson.fromJson(jsonStr, CreativeStatistic.class);
+                    score = betaSampler(exp665Param.getOrDefault("alpha", 1d) + Long.parseLong(statistic.getOrder()),
+                            (exp665Param.getOrDefault("beta", 100000d) + Long.parseLong(statistic.getExp()))) / (1 + exp665Param.getOrDefault("beta_k", 9d));
                 }
                 double s1 = score;
-                score=score*dto.getCpa()*dto.getBid1()*dto.getBid2();
+                score = score * dto.getCpa() * dto.getBid1() * dto.getBid2();
                 item.setScore(score);
                 item.setScore_type(665);
 
-                Map<String, Object> ext = this.extMap(statistic, "665", dto.getCpa(), null, exp663Param.getOrDefault("alpha", 1d), exp663Param.getOrDefault("beta", 10000d), null);
+                Map<String, Object> ext = this.extMap(statistic, "665", dto.getCpa(), null,
+                        exp665Param.getOrDefault("alpha", 1d), exp665Param.getOrDefault("beta", 10000d), null);
                 ext.put("s1", s1);
                 item.setExt(ext);
-            }catch (Exception e){
-                log.error("svc=thompsonScorerByExp665 {}",gson.toJson(e.getStackTrace()));
+            } catch (Exception e) {
+                log.error("svc=thompsonScorerByExp665 {}", gson.toJson(e.getStackTrace()));
             }
             result.add(item);
             i++;
@@ -175,73 +231,135 @@ public class VideoAdThompsonScorerV2 {
         Collections.sort(result);
         return result;
     }
-    public List<AdRankItem> thompsonScorerByExp666(ScoreParam param,List<AdPlatformCreativeDTO> adIdList){
-        List<AdRankItem> result=new LinkedList<>();
-        String jsonStr;
-        CreativeStatistic statistic = null;
+    // public List<AdRankItem> thompsonScorerByExp666(ScoreParam param,List<AdPlatformCreativeDTO> adIdList){
+    //     List<AdRankItem> result=new LinkedList<>();
+    //     String jsonStr;
+    //     CreativeStatistic statistic = null;
+    //
+    //     List<String> redisKey=new LinkedList<>();
+    //     adIdList.forEach(creativeDTO -> {
+    //         redisKey.add(redisCreativeStatisticsPrefix+creativeDTO.getCreativeId());
+    //     });
+    //     List<String> values=redisHelper.getValues(redisKey);
+    //     List<String> combineKeys=new LinkedList<>();
+    //     adIdList.forEach(creativeDTO -> {
+    //         combineKeys.add(redisVideoCreativeStatisticsPrefix+param.getVideoId()+"_"+creativeDTO.getCreativeId());
+    //     });
+    //     List<String> combineValues=redisHelper.getValues(combineKeys);
+    //     int i=0;
+    //     double score=0d;
+    //     for(AdPlatformCreativeDTO dto:adIdList){
+    //         String statisticType = "vid+cid";
+    //         AdRankItem item=new AdRankItem();
+    //         item.setVideoId(param.getVideoId());
+    //         item.setCpa(dto.getCpa());
+    //         item.setAdId(dto.getCreativeId());
+    //         try {
+    //             jsonStr=combineValues.get(i);
+    //             if(jsonStr==null){
+    //                 jsonStr=values.get(i);
+    //                 if(jsonStr==null){
+    //                     statisticType = "";
+    //                     score = betaSampler(exp666Param.getOrDefault("alpha",1d),exp666Param.getOrDefault("beta",100000d));
+    //                 }else {
+    //                     statisticType = "cid";
+    //                     statistic =gson.fromJson(jsonStr,CreativeStatistic.class);
+    //                     score = betaSampler(exp666Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()) ,
+    //                             (exp666Param.getOrDefault("beta",100000d)+Long.parseLong(statistic.getExp()))/(1+exp666Param.getOrDefault("beta_k",9d))) ;
+    //                 }
+    //             }else {
+    //                 statistic =gson.fromJson(jsonStr,CreativeStatistic.class);
+    //                 if(Double.parseDouble(statistic.getExp())>exp666Param.getOrDefault("viewThreshold",5000d)){
+    //                     score = betaSampler(exp666Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()) ,
+    //                             (exp666Param.getOrDefault("beta",100000d)+Long.parseLong(statistic.getExp()))/(1+exp666Param.getOrDefault("beta_k",9d))) ;
+    //                 } else if( values.get(i)!=null) {
+    //                     statistic =gson.fromJson(values.get(i),CreativeStatistic.class);
+    //                     score = betaSampler(exp666Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()) ,
+    //                             (exp666Param.getOrDefault("beta",100000d)+Long.parseLong(statistic.getExp()))/(1+exp666Param.getOrDefault("beta_k",9d))) ;
+    //                 }else {
+    //                     score = betaSampler(exp666Param.getOrDefault("alpha",1d),exp666Param.getOrDefault("beta",100000d));
+    //                 }
+    //             }
+    //             double s1 = score;
+    //             score=score*dto.getCpa()*dto.getBid1()*dto.getBid2();
+    //             item.setScore(score);
+    //             item.setScore_type(666);
+    //
+    //             Map<String, Object> ext = this.extMap(statistic, "666", dto.getCpa(), exp666Param.getOrDefault("viewThreshold",5000d), exp663Param.getOrDefault("alpha", 1d),
+    //                     exp663Param.getOrDefault("beta", 10000d), exp666Param.getOrDefault("beta_k",9d));
+    //             ext.put("s1", s1);
+    //             ext.put("group_field", statisticType);
+    //             item.setExt(ext);
+    //
+    //         }catch (Exception e){
+    //             log.error("svc=thompsonScorerByExp666 {}",gson.toJson(e.getStackTrace()));
+    //         }
+    //         result.add(item);
+    //         i++;
+    //     }
+    //     Collections.sort(result);
+    //     return result;
+    // }
+
+    public List<AdRankItem> thompsonScorerByExp666(ScoreParam param, List<AdPlatformCreativeDTO> adIdList) {
+        List<AdRankItem> result = new LinkedList<>();
+        Map<Long, CreativeStatistic> creativeStatisticsMap = this.batchFindCreativeRedisCache(redisCreativeStatisticsPrefix, adIdList);
+        Map<Long, CreativeStatistic> videoCreativeStatisticsMap = this.batchFindCreativeRedisCache(redisVideoCreativeStatisticsPrefix + param.getVideoId() + "_", adIdList);
+
+        double alpha = exp666Param.getOrDefault("alpha", 0d);
+        double beta = exp666Param.getOrDefault("beta", 0d);
+        double betaK = exp666Param.getOrDefault("beta_k", 0d) + 1;
+        double viewThreshold = exp666Param.getOrDefault("viewThreshold", 7000d);
 
-        List<String> redisKey=new LinkedList<>();
-        adIdList.forEach(creativeDTO -> {
-            redisKey.add(redisCreativeStatisticsPrefix+creativeDTO.getCreativeId());
-        });
-        List<String> values=redisHelper.getValues(redisKey);
-        List<String> combineKeys=new LinkedList<>();
-        adIdList.forEach(creativeDTO -> {
-            combineKeys.add(redisVideoCreativeStatisticsPrefix+param.getVideoId()+"_"+creativeDTO.getCreativeId());
-        });
-        List<String> combineValues=redisHelper.getValues(combineKeys);
-        int i=0;
-        double score=0d;
-        for(AdPlatformCreativeDTO dto:adIdList){
-            String statisticType = "vid+cid";
-            AdRankItem item=new AdRankItem();
-            item.setVideoId(param.getVideoId());
+        for (AdPlatformCreativeDTO dto : adIdList) {
+            Long cid = dto.getCreativeId();
+            String pairOrSingle;
+            double order;
+            double exp;
+            CreativeStatistic vidCidStatistics = videoCreativeStatisticsMap.getOrDefault(cid, new CreativeStatistic());
+            CreativeStatistic cidStatistics = creativeStatisticsMap.getOrDefault(cid, new CreativeStatistic());
+
+            if (vidCidStatistics.parseExpToDouble() >= viewThreshold) {
+                pairOrSingle = "pair";
+                order = vidCidStatistics.parseOrderToDouble();
+                exp = vidCidStatistics.parseExpToDouble();
+            } else {
+                pairOrSingle = "single";
+                order = cidStatistics.parseOrderToDouble();
+                exp = cidStatistics.parseExpToDouble();
+            }
+
+            double s1 = this.betaSampler((alpha + order), ((beta + exp) / betaK));
+            double score = s1 * dto.getCpa() * dto.getBid1() * dto.getBid2();
+
+
+            // 日志上报扩展参数
+            Map<String, Object> ext = new HashMap<>();
+            ext.put("a", alpha);
+            ext.put("b", beta);
+            ext.put("bk", betaK);
+            ext.put("order", order);
+            ext.put("exp", exp);
+            ext.put("s1", s1);
+            ext.put("viewThreshold", viewThreshold);
+            ext.put("pairOrSingle", pairOrSingle);
+            ext.put("cidStatistic", JSON.toJSONString(cidStatistics));
+            ext.put("vidCidStatistic", JSON.toJSONString(vidCidStatistics));
+            ext.put("cpa", dto.getCpa());
+            ext.put("abCode", 666);
+
+            AdRankItem item = new AdRankItem();
             item.setCpa(dto.getCpa());
             item.setAdId(dto.getCreativeId());
-            try {
-                jsonStr=combineValues.get(i);
-                if(jsonStr==null){
-                    jsonStr=values.get(i);
-                    if(jsonStr==null){
-                        statisticType = "";
-                        score = betaSampler(exp666Param.getOrDefault("alpha",1d),exp666Param.getOrDefault("beta",100000d));
-                    }else {
-                        statisticType = "cid";
-                        statistic =gson.fromJson(jsonStr,CreativeStatistic.class);
-                        score = betaSampler(exp666Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()) ,
-                                (exp666Param.getOrDefault("beta",100000d)+Long.parseLong(statistic.getExp()))/(1+exp666Param.getOrDefault("beta_k",9d))) ;
-                    }
-                }else {
-                    statistic =gson.fromJson(jsonStr,CreativeStatistic.class);
-                    if(Double.parseDouble(statistic.getExp())>exp666Param.getOrDefault("viewThreshold",5000d)){
-                        score = betaSampler(exp666Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()) ,
-                                (exp666Param.getOrDefault("beta",100000d)+Long.parseLong(statistic.getExp()))/(1+exp666Param.getOrDefault("beta_k",9d))) ;
-                    } else if( values.get(i)!=null) {
-                        statistic =gson.fromJson(values.get(i),CreativeStatistic.class);
-                        score = betaSampler(exp666Param.getOrDefault("alpha",1d)+Long.parseLong(statistic.getOrder()) ,
-                                (exp666Param.getOrDefault("beta",100000d)+Long.parseLong(statistic.getExp()))/(1+exp666Param.getOrDefault("beta_k",9d))) ;
-                    }else {
-                        score = betaSampler(exp666Param.getOrDefault("alpha",1d),exp666Param.getOrDefault("beta",100000d));
-                    }
-                }
-                double s1 = score;
-                score=score*dto.getCpa()*dto.getBid1()*dto.getBid2();
-                item.setScore(score);
-                item.setScore_type(666);
-
-                Map<String, Object> ext = this.extMap(statistic, "666", dto.getCpa(), exp666Param.getOrDefault("viewThreshold",5000d), exp663Param.getOrDefault("alpha", 1d),
-                        exp663Param.getOrDefault("beta", 10000d), exp666Param.getOrDefault("beta_k",9d));
-                ext.put("s1", s1);
-                ext.put("group_field", statisticType);
-                item.setExt(ext);
+            item.setScore(score);
+            item.setExt(ext);
+            item.setVideoId(param.getVideoId());
+            item.setScore_type(666);
 
-            }catch (Exception e){
-                log.error("svc=thompsonScorerByExp666 {}",gson.toJson(e.getStackTrace()));
-            }
             result.add(item);
-            i++;
         }
-        Collections.sort(result);
+
+        result.sort(equalsRandomComparator());
         return result;
     }
 
@@ -252,7 +370,7 @@ public class VideoAdThompsonScorerV2 {
         Double videoCreativeExpSum = this.sumCreativeStatisticExp(videoCreativeStatisticsMap.values());
 
         List<AdRankItem> result = new ArrayList<>(adIdList.size());
-        this.calcScore(result, adIdList,1d, creativeExpSum, videoCreativeExpSum, creativeStatisticsMap, videoCreativeStatisticsMap, exp669Param);
+        this.calcScore(result, adIdList, 1d, creativeExpSum, videoCreativeExpSum, creativeStatisticsMap, videoCreativeStatisticsMap, exp669Param);
         result.sort(equalsRandomComparator());
 
         for (AdRankItem adRankItem : result) {
@@ -277,7 +395,7 @@ public class VideoAdThompsonScorerV2 {
         for (AdRankItem adRankItem : result) {
             adRankItem.setVideoId(param.getVideoId());
             adRankItem.setScore_type(670);
-            if (MapUtils.isNotEmpty(adRankItem.getExt())){
+            if (MapUtils.isNotEmpty(adRankItem.getExt())) {
                 adRankItem.getExt().put("abCode", 670);
             }
         }
@@ -285,7 +403,7 @@ public class VideoAdThompsonScorerV2 {
         return result;
     }
 
-    private void calcScore(List<AdRankItem> result, List<AdPlatformCreativeDTO> adIdList,Double alpha, Double cidBeta, Double vidCidBeta, Map<Long, CreativeStatistic> cidMap, Map<Long, CreativeStatistic> vidCidMap, Map<String, Double> expParam) {
+    private void calcScore(List<AdRankItem> result, List<AdPlatformCreativeDTO> adIdList, Double alpha, Double cidBeta, Double vidCidBeta, Map<Long, CreativeStatistic> cidMap, Map<Long, CreativeStatistic> vidCidMap, Map<String, Double> expParam) {
         for (AdPlatformCreativeDTO dto : adIdList) {
 
             CreativeStatistic cidStatistic = cidMap.getOrDefault(dto.getCreativeId(), new CreativeStatistic());
@@ -351,9 +469,6 @@ public class VideoAdThompsonScorerV2 {
         double order = creativeStatistic.parseOrderToDouble() + alpha;
         double exp = creativeStatistic.parseExpToDouble() + beta;
 
-        if (order == 0 || exp == 0) {
-            return 0.0;
-        }
         log.info("calcThompsonScore.order: {}, exp: {}", order, exp);
         return this.betaSampler(order, exp);
     }
@@ -399,7 +514,7 @@ public class VideoAdThompsonScorerV2 {
         return map;
     }
 
-    class CreativeStatistic{
+    class CreativeStatistic {
 
         private String exp;
         private String click;
@@ -420,7 +535,7 @@ public class VideoAdThompsonScorerV2 {
             return exp;
         }
 
-        public Double parseExpToDouble() {
+        public double parseExpToDouble() {
             if (StringUtils.isBlank(exp)) {
                 return 0.0;
             }
@@ -438,8 +553,8 @@ public class VideoAdThompsonScorerV2 {
             return click;
         }
 
-        public Double parseClickToDouble(){
-            if (StringUtils.isBlank(click)){
+        public double parseClickToDouble() {
+            if (StringUtils.isBlank(click)) {
                 return 0.0;
             }
             return Double.parseDouble(click);
@@ -456,8 +571,8 @@ public class VideoAdThompsonScorerV2 {
             return order;
         }
 
-        public Double parseOrderToDouble(){
-            if (StringUtils.isBlank(order)){
+        public double parseOrderToDouble() {
+            if (StringUtils.isBlank(order)) {
                 return 0.0;
             }
             return Double.parseDouble(order);
@@ -474,40 +589,49 @@ public class VideoAdThompsonScorerV2 {
             return cpa;
         }
 
-        public Double parseCpaToDouble() {
+        public double parseCpaToDouble() {
             if (StringUtils.isBlank(cpa)) {
                 return 0.0;
             }
             return Double.parseDouble(cpa);
         }
     }
+
     double betaSampler(double alpha, double beta) {
+        if (alpha == 0 || beta == 0) {
+            return 0.0d;
+        }
         BetaDistribution betaSample = new BetaDistribution(alpha, beta);
         return betaSample.sample();
     }
+
     @Value("${ad.engine.new.thompson.exp.V2.663:{\"randomMin\":0.000001,\"randomMax\":0.00001,\"alpha\":1,\"beta\":10000}}")
-    public void setExp663Param(String str){
-        this.exp663Param=gson.fromJson(str,Map.class);
+    public void setExp663Param(String str) {
+        this.exp663Param = gson.fromJson(str, Map.class);
     }
+
     @Value("${ad.engine.new.thompson.exp.V2.664:{}}")
-    public void setExp664Param(String str){
-        this.exp663Param=gson.fromJson(str,Map.class);
+    public void setExp664Param(String str) {
+        this.exp664Param = gson.fromJson(str, Map.class);
     }
+
     @Value("${ad.engine.new.thompson.exp.V2.665:{}}")
-    public void setExp665Param(String str){
-        this.exp663Param=gson.fromJson(str,Map.class);
+    public void setExp665Param(String str) {
+        this.exp665Param = gson.fromJson(str, Map.class);
     }
+
     @Value("${ad.engine.new.thompson.exp.V2.666:{}}")
-    public void setExp666Param(String str){
-        this.exp663Param=gson.fromJson(str,Map.class);
+    public void setExp666Param(String str) {
+        this.exp666Param = gson.fromJson(str, Map.class);
     }
 
     @Value("${ad.engine.new.thompson.exp.V2.669:{}}")
-    public void setExp669Param(String str){
-        this.exp669Param=gson.fromJson(str,Map.class);
+    public void setExp669Param(String str) {
+        this.exp669Param = gson.fromJson(str, Map.class);
     }
+
     @Value("${ad.engine.new.thompson.exp.V2.670:{}}")
-    public void setExp670Param(String str){
-        this.exp670Param=gson.fromJson(str,Map.class);
+    public void setExp670Param(String str) {
+        this.exp670Param = gson.fromJson(str, Map.class);
     }
 }