Python中的动态编程任务

时间:2016-07-24 00:28:23

标签: python dictionary dynamic-programming

这是我试图解决的DP问题的玩具版本。假设我们有两个社区,分别有2个和3个停车站。

  1. 每个停车站的容量范围从0到固定的正数。
  2. 在任何给定时刻系统的状态是站点的可用停车位。例如,(2,3,4,5,6)其中(2,3)指的是第一邻域中的站点的可用点和第二邻域中的(4,5,6)。
  3. 每个电台可以开启(1)或关闭(0),我们希望在每个状态下找到要打开或关闭的电台。为此,我们必须测试所有可能的开/关组合。上述设置的一个这样的组合将是[[0,1],[1,0,1]]。
  4. 最后,从出发社区的每个车站到目的地社区旅行都有积极的可能性。例如,λ_{1,2} ^ {2}是从邻域1的站2到邻域2的概率。
  5. 我需要帮助的是如何存储上述内容以简化生活以及如何编写状态值的计算。您可以从当前状态转换到的状态取决于lambdas概率和给定的建议。例如,对于州(2,3,4,5,6)和建议[[0,1],[1,0,1]],值将为:

    enter image description here

    • 第一个术语的解释:鉴于这个lambda,我们知道汽车从1号街区的1号站出发去了2号街区。因此,邻域1中的站1的状态从2变为3.此外,我们在邻域2中有两个推荐站,其中汽车可以同样地去。因此,我们得到两个学期。在第一个中,邻域2中的站1的容量下降1,而在第二个项中,邻域2中的站3的容量下降1。
      • 第二个学期的类似解释,唯一的区别是汽车现在从1号街区的2号站出发。
      • 对于第三个学期,我们从lambda看到汽车从附近2的1号车站到1号附近。但现在,只推荐附近1号的第2站,因此我们只得到一个容量为邻域1中的站2减1,邻域2中的站1增加1。
      • 其他术语的类似解释。

    我脑海中存在的问题的一般伪代码:

     Create State_Space
     Create recommendation_combinations # All possible (0,1) combinations 
     V = dict([state,0] for state in State_Space) # Initialize the value vector
    
    for each_state in State_Space:
       for each_recommendation_combination in recommendation_combinations:
           Compute V(state)_combination
    
       V(state) = min(V(state)_combination)
    

    鉴于问题结构的复杂性(即社区内的站点),您如何建议存储上述内容? (我当时想要使用字典,但我不知道如何使用带字典的itertools来创建推荐组合)。此外,对于州的价值计算的任何编程帮助都非常感谢!

    非常感谢提前。

0 个答案:

没有答案