0-1等概率问题推导

在这里插入图片描述

示例:已知f()函数为3-11等概率返回,求35-53等概率返回。

public class HelloWorld {
    public static void main(String []args) {
		// 已知f()函数为3-11等概率返回,求35-53等概率返回。
		// check();// check(f)
		// 利用已知f()函数,可以推理出0-1等概率发生器。
		// 已知f() 为3-11等概率返回,那么,3-6出现时=0,8-11出现时=1,遇到7时重做
		// 将7得概率等概率分给0、1,那么此时0-1就是等概率返回得。
		// check();// check(f1)
		// 那么要想求得35-53等概率发生,只需要求得0-18等概率返回再加上35即可。
		// P(0-18)+35
		// 重点:此时需要利用二进制位运算,18需要占用5个二进制位。
		// 5个二进制位00000-11111代表0-31,通过0-1发生器可以求得0-31等概率发生。
		// 只需要在大于18时重做,即可获得0-18等概率发生器。
		// check();// check(f2)
		check();// check(f3)
		// 变形:通过0-1等概率发生器,得出000000-111111即0-63等概率发生器,当大于53或小于35时重做
		// 此种方法时间复杂度超级不理想
    }
	
	// f() 3-11等概率返回
	private static int f(){
		return (int)(Math.random()*9) +3;
	}
	
	// f1() 0-1等概率返回
	private static int f1(){
		int ans =0;
		do{
			ans = f();
		}while(ans == 7);
		return ans <7 ? 0 : 1;
	}
	
	// f2() 00000-11111等概率返回 即 0-31等概率返回  大于18时重做 --> 0-18等概率
	private static int f2(){
		int ans = 0;
		do{
			ans =  (f1()<<4) + (f1()<<3) + (f1()<<2) + (f1()<<1) + f1(); 
		}while(ans > 18);
		return ans;
	}
	
	// f3() P(0-18)+35
	private static int f3(){
		return f2() +35;	
	}
	
	// f4() 000000-111111等概率返回 即 0-63等概率返回  大于53或小于35时重做 --> 35-53等概率
	private static int f4(){
		int ans = 0;
		do{
			ans = (f1()<<5)+(f1()<<4) + (f1()<<3) + (f1()<<2) + (f1()<<1) + f1();		
		}while(ans<35 || ans >53);
		return ans;
	}
	
	// 验证等概率
	private static void check(){
		// 执行次数
		int testTimes = 10000000;
		// 定义验证数组
		int[] che=new int[64];
		for(int i=0;i<testTimes;i++){
			// che[f()]++;
			// che[f1()]++;
			// che[f2()]++;
			// che[f3()]++;
			che[f4()]++;
		}
		// 打印随机结果
		for(int j=0;j<che.length;j++){
			System.out.println(j+" 这个数一共出现了"+ che[j] +" 次");
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
哈密顿-雅可比-贝尔曼方程的推导是基于动态规划的思想。动态规划是一种解决多阶段决策过程最优化问题的方法。在这个过程中,我们需要找到一个最优策略,使得总成本最小化。这个问题可以被分解成多个子问题,每个子问题都是一个最优化问题。通过解决这些子问题,我们可以得到整个问题的最优解。 在动态规划中,我们需要定义一个价值函数,它表示在当前状态下采取最优策略所能得到的最小成本。哈密顿-雅可比-贝尔曼方程就是用来计算这个价值函数的。具体来说,它是一个偏微分方程,描述了价值函数在时间和状态上的变化。 哈密顿-雅可比-贝尔曼方程的推导可以分为两个步骤。首先,我们需要定义一个贝尔曼方程,它描述了价值函数在一个时间步长内的变化。然后,我们将这个贝尔曼方程推广到连续时间和状态空间上,得到哈密顿-雅可比-贝尔曼方程。 具体来说,贝尔曼方程可以表示为: V(s) = min_u {c(s,u) + γ ∑_s' p(s'|s,u) V(s')} 其中,V(s)表示在状态s下的价值函数,c(s,u)表示在状态s下采取行动u所产生的成本,p(s'|s,u)表示在状态s下采取行动u后转移到状态s'的概率,γ是一个折扣因子,用于平衡当前和未来的成本。 接下来,我们将这个贝尔曼方程推广到连续时间和状态空间上。我们定义一个哈密顿函数H(x,u,t),它表示在时间t和状态x下采取行动u所能得到的最小成本。哈密顿函数可以表示为: H(x,u,t) = min_v {c(x,u,v,t) + ∂V(x,t)/∂t + ∑_i=1^n f_i(x,u,v,t) ∂V(x,t)/∂x_i} 其中,c(x,u,v,t)表示在状态x下采取行动u和v所产生的成本,f_i(x,u,v,t)表示状态x在第i个维度上的变化率。 最后,我们可以得到哈密顿-雅可比-贝尔曼方程: ∂V(x,t)/∂t + min_u H(x,u,t) = 0 这个方程描述了价值函数在时间和状态上的变化。通过求解这个方程,我们可以得到最优策略和最小成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值