假设我们要在网页上的某个位置显示一系列的广告,按照一定的规则,比如给的广告费用的多少,我们对不同的广告都设定了相应的显示几率,这样用户在浏览网页的时候,就会按照设定好的几率随即显示广告内容。下面的算法实现了这个随机选取内容的功能,欢迎大家优化这个算法。
/**
* @author Tracy.Zhang
*
*/
public class Random {
/**
* 四个广告A,B,C,D.
*/
private String choices[] = { "A", "B", "C", "D" };
/**
* 每个广告对应的几率
*/
private int rates[] = { 10, 20, 30, 40 };
/**
* 数轴
*/
private List<Integer> list = new ArrayList<Integer>();
/**
* 计算数轴上的点
* @param j
* @return
*/
private int getRandomRate(int j) {
int rate = 0;
for (int i = 0; i < j; i++) {
rate = rate + rates[i];
}
return rate;
}
/**
* 构造一个数轴,每个选项对应一个区间
*/
private void init() {
list.add(0);
for (int i = 0; i < choices.length; i++) {
list.add(getRandomRate(i + 1));
}
}
/**
* 使用Math 的random 方法产生一个0--100 的随机数种子,
* 判断其落在那个区间上.返回该区间对应的广告.
* @return
*/
public String getChoice() {
init();
String choice = "";
int random = (int) (100 * Math.random());
for (int i = 0; i < choices.length; i++) {
if (list.get(i) <= random && random < list.get(i + 1)) {
choice = choices[i];
break;
}
}
return choice;
}
}
以下是相应的测试用例:
public class RandomTest {
@Test
public void testGetRate() {
Random ran = new Random();
String tempChoice = "";
int total = 100000;
int a = 0;
int b = 0;
int c = 0;
int d = 0;
for (int i = 0; i < total; i++) {
tempChoice = ran.getChoice();
if("A".equals(tempChoice)){
a++;
}else if("B".equals(tempChoice)){
b++;
}
else if("C".equals(tempChoice)){
c++;
}
else if("D".equals(tempChoice)){
d++;
}
}
System.out.print("Total="+total+" Rating:A="+a+":B="+b+":C="+c+":D="+d);
}
@Test
public void testGetRandom1() {
Random ran = new Random();
System.out.print(ran.getChoice());
}
}
测试结果,
Total=100000 Rating:A=10087:B=19780:C=30060:D=40073
Total=50000 Rating:A=5024:B=10038:C=15071:D=19867
... ...
分享到:
相关推荐
这个概念涉及到如何通过权重来调整随机事件发生的概率,以便更好地控制系统的输出或者优化决策过程。 首先,我们需要理解“随机几率”是指一个事件发生的不确定性和其发生的概率。在计算机科学中,随机性常用于模拟...
1. **初始化**:设定初始温度T和一个随机解,这可以是问题的一个合法解。 2. **生成新解**:根据当前解,生成一个新的候选解,这通常通过微小变化(例如,交换旅行商问题中的两个城市)来实现。 3. **计算能量差**:...
在实际应用中,随机概率的选择算法还可以结合其他因素进行优化,比如使用更高级的随机数生成器以获得更好的随机性,或者调整概率分布来平衡游戏的难易度。同时,也可以考虑使用累积概率,这样可以避免在概率数组中...
在选择操作中,算法根据个体的适应性值来确定其被选为繁殖后代的几率。这个过程模拟了“适者生存”的自然法则。交叉和变异是遗传算法的主要遗传操作,分别用来模拟基因的重组和突变,为算法带来新的遗传信息。 为了...
程序设计部分提供了一个简化的代码框架,包括初始化种群、设定算法参数以及执行优化过程。然而,实际的完整源代码并未在此给出,这通常需要结合具体的MATLAB编程技巧和天线理论知识来完成。 参考文献应包括遗传算法...
随着科技的发展,传统的水库优化调度方法逐渐显示出局限性,主要体现在动态规划法和逐步优化算法上。动态规划法在处理多阶段决策问题时,随着状态和决策空间的增长,会出现所谓的“维数灾”,即计算量剧增导致难以...
算法中的关键参数包括布谷鸟的数量、寄生概率、巢穴替换策略等,这些参数的设定对算法性能有着显著影响。 算法的本质是通过数学模型生成新的解决方案,并依据一定的评价标准(如目标函数)进行迭代更新。布谷鸟搜索...
总的来说,这个项目提供了用MATLAB实现的蚁群优化算法解决旅行商问题的完整流程,包括问题建模、算法设计、可视化以及结果评估。通过学习和分析这些源代码,我们可以深入了解蚁群优化算法的原理及其在实际问题中的...
总的来说,这个VB遗传算法演示程序提供了一个灵活的平台,让用户亲手实践并探索遗传算法的各种参数组合,从而深入理解其工作原理和优化策略。无论是对遗传算法感兴趣的初学者,还是寻求实际问题解决方案的专业人士,...
遗传算法是一种借鉴自然界生物进化机制的人工智能优化技术,它通过模拟遗传选择和自然淘汰的过程来寻找最优解或近似最优解。在IT领域,尤其是机器学习和优化问题解决方面,遗传算法因其强大的搜索能力和对复杂问题的...
4. **选择(Selection)**: 根据适应度值进行选择,较高适应度的染色体有更大几率被选中。 5. **交配(Crossover)**: 被选中的染色体按照一定概率进行交配,产生新的后代。 6. **突变(Mutation)**: 新产生的后代...
1. **位置更新**:每个磷虾的位置表示可能的解,根据磷虾的当前位置、群体中心和随机游动来更新。 2. **速度更新**:磷虾的速度决定了其移动方向和距离,受到当前位置、目标位置(最优解)以及随机因素的影响。 3. *...
1. **选择操作**:这是遗传算法的核心步骤,通常采用轮盘赌选择、锦标赛选择等方式,根据个体的适应度值来决定其在下一代中出现的概率。适应度函数是评估个体优劣的关键,它应反映解的质量,高适应度的个体有更大...
- 根据设定的迭代次数或达到特定条件后结束遗传操作。 在Matlab中,可以通过编写脚本来实现上述算法,例如`distTSP.txt`文件可能包含了城市间的距离矩阵,用于计算各个染色体的适应度。通过不断迭代和优化,遗传...
在描述中提到的概率抽奖算法,是指根据预先设定的各个奖项的概率进行随机抽取。这意味着不同的奖项有不同的中奖几率,而这些几率必须在算法中精确体现,确保每次抽奖的结果具有不可预测性,同时保持整体概率的正确性...
在MATLAB中,可以使用循环结构来实现算法流程,包括生成初始解、设定初始温度、定义接受概率函数等步骤。接受概率函数通常采用指数函数形式,用于计算在当前温度下接受新解的概率。在每一步迭代中,根据概率决定是否...
5. 终止条件:一个遗传算法程序通常需要设定一个终止条件来判断何时停止迭代。条件可以是达到预设的迭代次数、找到一个足够好的解,或是种群进化不再产生显著变化等。 6. 输出结果:当满足终止条件时,输出当前最优...
即从那些搜索效率低下、成绩较差的个体的历史最优位置(pbest)中随机选择一个个体,更新其速度和位置,使其有机会在全局范围内进行搜索,以此增加跳出局部最优的几率。二是针对群体中表现较好的粒子采取局部搜索...
粒子群优化算法(Particle Swarm Optimization, PSO)因其概念简单、参数调整少、鲁棒性好等优点,在路径规划问题中得到了广泛的应用。然而,粒子群算法存在一个普遍问题,即随着算法迭代次数的增加,粒子群的多样性...