有一组优惠 A-20优惠, B-30元优惠, C-5元优惠 当用户满足条件时随机返回一个优惠;在活动预算一定的情况下需要保证C类优惠券中奖概率最高,B类优惠券最低;以下是权重的实现;
/** * Copyright 2014-2015, , Inc. All Rights Reserved. * * Date: 2016年1月23日 */ package org.demo.core; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /*** * * Desc:TODO * * @author zhangwei<wei.zw@corp.netease.com> * @since 2016年1月23日 下午1:35:16 * @version v 0.1 */ public class WeightRandomTest { private static Map<Double, String> weightMapping = new HashMap<>(); static { weightMapping.put(30d, "A"); weightMapping.put(20D, "B"); weightMapping.put(50D, "C"); } public static void main(String[] args) { int c = 0; int a = 0; int b = 0; for (int i = 0; i < 2000000; i++) { String str = WeightRandomUtil.getWeightRandom(weightMapping); if ("A".equals(str)) { a++; } else if ("B".equals(str)) { b++; } else if ("C".equals(str)) { c++; } } System.out.println(c / 2000000d); System.out.println(b / 2000000d); System.out.println(a / 2000000d); } } class WeightRandomUtil { /*** * 计算权重总和 * * @param weightArrays * @return * @author zhangwei<wei.zw@corp.netease.com> */ private static double weightSum(Set<Double> weights) { double weightSum = 0; for (double weightValue : weights) { weightSum += weightValue; } return weightSum; } /*** * * * @param weightArrays * 权重数组 * @return 返回数据 * @author zhangwei<wei.zw@corp.netease.com> * @param <T> */ public static <T> T getWeightRandom(Map<Double, T> weightValueMapping) { double weightSum = weightSum(weightValueMapping.keySet()); double stepWeightSum = 0; List<Double> list = new ArrayList<>(weightValueMapping.keySet()); Collections.sort(list, new Comparator<Double>() { @Override public int compare(Double o1, Double o2) { return (int) (o2 - o1); } }); double r = Math.random(); for (double weight : list) { // 计算权重值 stepWeightSum += weight; // 如果随机数落在了权重区间则返回索引值 if (r <= stepWeightSum / weightSum) { return weightValueMapping.get(weight); } } return null; } }
相关推荐
总的来说,AHP层次分析法是一种实用的决策工具,其核心在于权重的计算,而权重的准确获取依赖于判断矩阵的处理和特征值、特征向量的计算。在实际应用中,应确保判断矩阵的一致性和计算过程的精确性,以得到可靠的...
由于HashMap未在上述示例中使用,但若要进行统计分析,如计算每个权重值出现的频率,HashMap会是一个很好的选择。 总的来说,Java实现按权重随机数涉及对概率的理解以及对数据结构和算法的应用。通过对权重数组的...
基于自适应权重马尔科夫随机场的立体匹配视差优化算法 立体匹配是计算机视觉领域中的一种技术,通过计算方式获取二维图像对应的视差图,将二维图像信息转变为三维深度信息,从而获取场景的距离信息。立体匹配在智能...
在某些场景,比如抽奖系统、广告展示或者资源分配等,我们可能需要根据权重进行随机排序。权重决定了每个元素被选取的概率,权重越大,被选中的概率越高。本文将深入探讨如何使用PHP实现这种按权重随机排序的数据...
- **概率函数**:`chance.weighted(array, weights)` 可以根据权重返回数组中的一个元素,用于更复杂的概率分布。 7. **其他数据类型** - **颜色**:`chance.color()` 可以生成随机颜色名称或十六进制值。 - **...
根据提供的文件内容,本文是一篇关于机器人动力学参数辨识的研究文章,具体内容涵盖了SCARA机器人动力学模型的建立、随机权重粒子群优化算法的开发以及动力学参数辨识的过程。以下是对文章中涉及知识点的详细说明: ...
- **映射(Map)**:可能使用`HashMap`来存储姓名与其权重值的对应关系,这样可以在随机选择时快速查找权重值。 5. **用户界面(UI)**: 这个程序可能包含一个图形用户界面(GUI),让用户能够直观地输入姓名和...
1. **模型训练**:首先,我们需要训练一个基础模型,以获取所有权重的初始值。这通常是通过随机初始化权重,然后在数据集上进行多轮迭代训练完成的。 2. **重要性评估**:接着,对模型的每个权重进行重要性评估。...
易语言是一种基于中文编程的程序设计语言,...通过理解易语言的字符串和随机数处理,我们可以根据实际需求灵活调整上述代码,以满足各种随机字符生成的需求。这个过程不仅锻炼了编程思维,也加深了对易语言特性的理解。
对于您添加的每个值,几率可以是您想要的 0 到 1 之间的任何值,但在您尝试获取值之前,提供的所有权重的总和必须加起来为 1,以便保证有一个值出现背部。 添加所有权重后,使用 GetNext 方法获取下一个值。
这可以通过调整随机数生成的方式实现,例如,根据权重分配每个参与者的概率值,然后使用`rand`函数的累积分布函数(CDF)版本`randi([0,1],[],'prob')`来生成符合特定概率分布的随机索引。 此外,为了保证公平性,...
这篇文章主要介绍了8种不同的权重计算方法,这些方法可以帮助研究人员根据数据特性选择最合适的权重分配方式。 第一类权重计算方法是因子分析和主成分分析,这两种方法都基于信息浓缩的原理,通过解释变量的方差来...
权重反映了各个因素在整体评价中的相对重要性,它是一个模糊随机量,具有随机性和模糊性。确定权重的方法多样,包括主观赋权法和客观赋权法。 1. **德尔菲法**: 德尔菲法是一种基于专家意见的权重确定方法,适用...
标题中的“电信设备-一种基于互信息的多b值扩散权重图像的降噪方法”揭示了这个压缩包文件内容的核心,主要关注的是电信设备中图像处理的技术,特别是针对噪声的消除。这种技术利用了互信息(Mutual Information, MI...
在2.2节中,我们利用随机算法模拟针的落下,通过统计实验数据来逼近π的值。这种方法是蒙特卡罗方法的一个例子,它是一种基于大量随机抽样来求解问题的统计计算方法。 然后,我们来到了排序算法领域,"舍伍德随机...
5. **随机一致性指标(RI)**:定义了一个随机一致性指标数组RI,用于一致性检验。这个数组根据矩阵的阶数预先设定。 6. **一致性指标CI计算**:`CI = (Jmax - N) / (N - 1);`计算一致性指标CI。 7. **一致性比率CR...
为了实现基于权重的随机选择,我们可以编写一个名为`countWeight`的函数,其工作原理是将每个奖项按照其权重值复制相应数量的次数,然后从这个扩大的数组中随机选择一个元素: ```php function countWeight($data) ...
在TensorFlow框架中,有时我们需要根据变量的名称来获取其对应的值,特别是在使用预定义的模块(如slim)或处理滑动平均等操作时。这种情况通常发生在系统自动生成了内部变量,而我们并没有直接创建它们。本篇将介绍...