`
zhangwei_david
  • 浏览: 470008 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

根据权重获取随机值

    博客分类:
  • Java
 
阅读更多

     有一组优惠 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;
	}
}

 

0
0
分享到:
评论

相关推荐

    论文研究-基于随机惯性权重的简化粒子群优化算法.pdf

    算法采用去除速度项的粒子群简化结构,通过随机分布的方式获取惯性权重提高新算法的局部搜索和全局搜索能力,并且学习因子采用异步变化的策略来改善粒子的学习能力。考虑到个体之间的相互影响关系,每个粒子的个体...

    Java实现按权重随机数

    主要介绍了Java实现按权重随机数,本文给出了提出问题、分析问题、解决问题三个步骤,需要的朋友可以参考下

    论文研究-区间值模糊随机多准则决策方法.pdf

    利用不完全的准则权重,通过规划模型求解,获取各方案在各自然状态下的加权记分函数值与加权精确函数值的区间,利用不完全的状态概率,得到各方案的记分函数期望值与精确函数期望值的区间,根据决策者风险偏好水平,...

    WeightedRandomization:简单加权随机化算法的实现 带使用案例

    对于您添加的每个值,几率可以是您想要的 0 到 1 之间的任何值,但在您尝试获取值之前,提供的所有权重的总和必须加起来为 1,以便保证有一个值出现背部。 添加所有权重后,使用 GetNext 方法获取下一个值。

    WeightedRandomization:简单加权随机化算法的实现

    对于您添加的每个值,几率可以是您想要的 0 到 1 之间的任何值,但在您尝试获取值之前,提供的所有权重的总和必须加起来为 1,以便保证有一个值出现背部。 添加所有权重后,使用 GetNext 方法获取下一个值。

    jmeter-plugins-wsc-0.7.jar -jmeter吞吐量插件

    此控制器获取有关子元素的信息,并提供对它们的相对权重的管理。相对权重表示在线程迭代期间执行子元素的频率。请注意,每个线程都有独立的迭代计数器。 映射到子名称的相对权重,即使子名称的顺序已更改,也会保存...

    Weights-Initialization-in-Nueral-Networks:神经网络中的权重初始化技术

    神经网络权重初始化神经网络中的权重初始化技术•权重初始化:•建立基本的神经网络有点令人费解,最重要的是调优它以获得更好的结果是一件繁琐的工作,... 一个可教的神经网络将在学习开始之前将权重和偏差值随机化

    基于前景M-V准则的正态三角模糊随机多属性决策方法

    针对具有正态三角模糊随机变量且属性权重未知的多属性决策问题, 提出基于前景均值-方差(M-V) 准则的正态三角模糊随机多属性决策方法. 该方法首先构建正态三角模糊随机决策矩阵, 进而通过运算得到属性值的期望与方差,...

    一种新颖的人脸识别方法:使用随机加权网络和拟奇异值分解

    本文设计了一种新颖的人脸识别方法,该方法主要基于一种新的特征提取方法和一种有效的分类器-随机权重网络(RWN)。 其特征提取的创新体现在原始图像的几何特征和代数特征的良好融合中。 这里的几何特征是通过快速...

    weight-random:CDC +线性搜索算法的加权随机

    然后生成一个介于0和所有权重之和之间的随机数,进行线性搜索以在离散CDF数组中找到该随机数,并获取与该条目对应的值-这是加权随机数。 安装 npm install weight-random 用法 import { random } from 'weight-...

    论文研究 - 使用背包问题调整大数据流

    本文将为每条数据提供价值,这取决于该数据的重要性(每条数据均由两个参数的大小和值定义),并且该方法试图找到从源到目标的最佳路径,一个数学模型可以根据0-1背包问题调整最短路径之间的数据流。 我们还将分别...

    Linear-Least-Squares-Fit:使用线性最小二乘和梯度下降来拟合随机生成的线性数据

    与梯度下降法比较: 用选定的值初始化权重后,我们发现适合LMS。 现在,当我们使用批处理学习在梯度下降方法上训练数据时,我们发现在一个时期之后,我们获得的权重与最佳权重非常接近。 我们可以在这里停止以获得...

    【毕业设计】基于大数据个性化音乐推荐算法分析.rar

    Boosting算法(提升法)指的是迭代算法,核心思想是对训练样本进行k次迭代,每次迭代形成一个弱学习器,然后根据学习误差对分类错误的样本加大训练权重,形成新的带有权重的训练集,训练形成新的弱学习器;...

    mcopt:用于随机优化的 Java 库。 包括几个玩具问题和实验线束

    用于随机优化的 Java 库。 包括几个玩具问题和实验线束。 开发此代码主要是为了支持我在乔治亚理工学院注册 CS7641。 它支持爬山、模拟退火、遗传算法(可扩展的交叉/变异功能)以及围绕 MIMIC 算法的 ABAGAIL ( ) ...

    PHP实现负载均衡的加权轮询方法分析

    随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。 源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算...

    一种基于WiFi的室内定位系统设计与实现

    指纹库中落在此区间的所有位置点设平均权值,最后选取权重值最大者为待定位点的位置估计,如有相同权重值,则比较信号强度距离,取最小者,这种算法在一定程度上克服了RSSI 信号随机抖动对定位的影响,提高了定位的...

    gridspace:用于创建基于网格的合成的小型处理程序

    网格空间 v1.0.0 2008 - 根据艺术许可 2.0 命令 SPACE新建一行 o (开关),用于“返回原点模式”开/关 m (开关),用于“球模式”,如果它排斥或吸引 ... 注意:颜色是从这个调色板中随机获取的 可以

    Computer-Vision-2020

    要求点:根据以下规范从头开始训练浅层网络:使用表1中所示的网络布局;由于输入图像的尺寸为64×64,因此您需要调整图像的尺寸以将其输入网络。请遵循简单的方法,分别沿x和y重新缩放整个图像,以获取合适的尺寸。...

    基于威胁分析技术的网络危险信息源检测方法研究

    根据信息系统期望输出和实际输出值,计算每个输出层误差函数偏置,并对各层之间权重进行更新,及时获取全局误差,由此实现网络危险信息源检测。通过仿真结果可知,该方法误检率较低,可如实反映网络复杂环境。

    一种自适应高超声速飞行器跟踪制导律设计

    该制导律以神经网络控制理论为基础,采用同步扰动随机逼近(simultaneous perturbation stochastic approximation, SPSA)的方法对神经网络中的权重值进行估计,从而给出制导指令,完成制导律的设计过程。...

Global site tag (gtag.js) - Google Analytics