<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛(ài)生活是一切藝術(shù)的開(kāi)始

    統(tǒng)計(jì)

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個(gè)公司技術(shù)

    我的鏈接

    淘寶技術(shù)

    閱讀排行榜

    評(píng)論排行榜

    深入理解動(dòng)態(tài)規(guī)劃的一系列問(wèn)題(4)

    第四個(gè)動(dòng)態(tài)規(guī)劃問(wèn)題是 最優(yōu)分配問(wèn)題(Optimal Allotment Problem:ALLOT),其問(wèn)題描述是:有M個(gè)單位的資源,有N個(gè)人,把d個(gè)單位的資源分配給某個(gè)人有一定的成本,如何分配這些資源給這N個(gè)人,能使成本最小。這顯然是一個(gè)典型的DP問(wèn)題,組合優(yōu)化策略,解決這個(gè)問(wèn)題,首先就是要抽象DPFE動(dòng)態(tài)規(guī)劃方程,假設(shè)M個(gè)單位的資源,N個(gè)人,把d個(gè)單位資源分配給編號(hào)為k的人的成本計(jì)算方式為C(k,d),0≤d≤M,1≤k≤N。回想我們列DPFE方程的思路,首先要想到的就是狀態(tài),如何定義一個(gè)狀態(tài),狀態(tài)總是針對(duì)總體,總共就M個(gè)單位的資源,N個(gè)人,那么我們不妨定義狀態(tài)(k,m),其中k為已經(jīng)分配到第k個(gè)人,m為此時(shí)所剩余的資源單位。于是把這個(gè)過(guò)程擴(kuò)展,以k為分析點(diǎn),此時(shí)對(duì)下一個(gè)人進(jìn)行d個(gè)單位資源的分配,于是對(duì)于下一個(gè)過(guò)程,就應(yīng)該是第k+1個(gè)人,總共剩余m-d個(gè)單位的資源,表示為狀態(tài)(k+1,m-d)。這樣,我們的DPFE也就初現(xiàn)端倪了:f(k,m)=min{C(k,d)+f(k+1,m-d)}。目標(biāo)函數(shù)是計(jì)算f(1,M),基本條件是f(N+1,m)=0當(dāng)m≥0。

    我們把問(wèn)題具體化,有4個(gè)蘋(píng)果,要分給3個(gè)小朋友,小朋友按照1-3編號(hào),每個(gè)小朋友拿到一定個(gè)數(shù)蘋(píng)果后會(huì)哭鬧一段時(shí)間(因?yàn)樗麄兪切∨笥眩詴?huì)哭鬧),具體時(shí)間表如下:

    C(k,d)=[

                ∞,1.0,0.8,0.4,0.0

                ∞,1.0,0.5,0.0,0.0

                ∞,1.0,0.6,0.3,0.0

               ], 1≤k≤3, 0≤d≤4

    k是小朋友編號(hào),d是分給小朋友的蘋(píng)果數(shù),可以看到,當(dāng)分給小朋友0個(gè)蘋(píng)果時(shí)(不分蘋(píng)果),那么小朋友會(huì)無(wú)休止的哭鬧,而把全部(4個(gè))蘋(píng)果全部分給一個(gè)小朋友時(shí),小朋友不會(huì)哭鬧(0時(shí)間)。那么根據(jù)這個(gè)時(shí)間,提供一個(gè)最優(yōu)的分蘋(píng)果方案,使得小朋友們拿到蘋(píng)果后的哭鬧時(shí)間最短。

    那么,根據(jù)這個(gè)具體問(wèn)題,我們抽象的結(jié)果就是f(1,4)=1.0+0.5+1.0=2.5,最優(yōu)分布是d1=1.0,d2=0.5,d3=1.0,這樣的分配方案。具體解法見(jiàn)source code:

       1: /*
       2:  * Copyright (C) 2013 changedi
       3:  *
       4:  * Licensed under the Apache License, Version 2.0 (the "License");
       5:  * you may not use this file except in compliance with the License.
       6:  * You may obtain a copy of the License at
       7:  *
       8:  * http://www.apache.org/licenses/LICENSE-2.0
       9:  *
      10:  * Unless required by applicable law or agreed to in writing, software
      11:  * distributed under the License is distributed on an "AS IS" BASIS,
      12:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13:  * See the License for the specific language governing permissions and
      14:  * limitations under the License.
      15:  */
      16: package com.jybat.dp;
      17:  
      18: import java.util.HashMap;
      19: import java.util.Map;
      20:  
      21: public class ALLOT {
      22:  
      23:     private static int N = 3;
      24:     private static int M = 4;
      25:     
      26:     private static final double INF=Double.MAX_VALUE;
      27:     
      28:     private static Map<Integer,Integer> choices = new HashMap<Integer,Integer>();
      29:     
      30:     private static final double [][] c = {
      31:         {INF,1.0,0.8,0.4,0.0},
      32:         {INF,1.0,0.5,0.0,0.0},
      33:         {INF,1.0,0.6,0.3,0.0}
      34:     };
      35:     
      36:     private static double cost(int k, int d) {
      37:         return c[k-1][d];
      38:     }
      39:     
      40:     public static double f(int k, int m){
      41:         if(k>N&&m>=0) return 0.0;
      42:         else{
      43:             double mm = Double.MAX_VALUE;
      44:             int dispatch = -1;
      45:             for(int d=0;d<=m;d++){
      46:                 double t = cost(k,d)+f(k+1,m-d);
      47:                 if(t<mm) {
      48:                     mm = t;
      49:                     dispatch = d;
      50:                 }
      51:             }
      52:             if(!choices.containsKey(k))
      53:                 choices.put(k, Integer.MAX_VALUE);
      54:             if(mm<choices.get(k))
      55:                 choices.put(k,dispatch);                
      56:             return mm;
      57:         }
      58:     }
      59:     /**
      60:      * @param args
      61:      */
      62:     public static void main(String[] args) {
      63:         double minCost = f(1,M);
      64:         System.out.println("min cost is : "+minCost);
      65:         System.out.print("solution is : ");
      66:         for(int i=1;i<=N;i++){            
      67:             System.out.print(choices.get(i));
      68:             if(i<N)
      69:                 System.out.print(",");
      70:         }
      71:     }
      72:  
      73: }

    PS:因?yàn)榭紤]到這里的選擇不是很長(zhǎng)的代碼,可能不影響理解DP,所以把記錄選擇方案的代碼也加進(jìn)來(lái)了。

    posted on 2014-04-01 11:09 changedi 閱讀(1824) 評(píng)論(4)  編輯  收藏 所屬分類: 算法

    評(píng)論

    # re: 深入理解動(dòng)態(tài)規(guī)劃的一系列問(wèn)題(4) 2014-04-01 21:21 施工隊(duì)伍

    這個(gè)問(wèn)題是很值得規(guī)劃的啊  回復(fù)  更多評(píng)論   

    # re: 深入理解動(dòng)態(tài)規(guī)劃的一系列問(wèn)題(4) 2014-04-02 13:00 萬(wàn)利鎖業(yè)

    期待更新啊  回復(fù)  更多評(píng)論   

    # re: 深入理解動(dòng)態(tài)規(guī)劃的一系列問(wèn)題(4) 2014-04-03 11:11 護(hù)欄

    來(lái)看看那  回復(fù)  更多評(píng)論   

    # re: 深入理解動(dòng)態(tài)規(guī)劃的一系列問(wèn)題(4) 2014-04-04 10:22 柚子舍

    準(zhǔn)備好好學(xué)習(xí)下java  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 中文字幕版免费电影网站| 亚洲AV日韩综合一区尤物| 国产av天堂亚洲国产av天堂| 亚洲午夜福利精品久久| 亚洲成人高清在线| 亚洲成A人片在线观看中文| 亚洲精品人成无码中文毛片| 亚洲精品NV久久久久久久久久| 亚洲成AV人在线观看网址| 亚洲精品黄色视频在线观看免费资源| 亚洲精品tv久久久久久久久久| 亚洲日本中文字幕天堂网| 国产亚洲日韩在线三区| 亚洲成在人线av| 久久亚洲日韩看片无码| 亚洲人成网站18禁止久久影院| 亚洲AV无码乱码在线观看代蜜桃 | 最近的中文字幕大全免费8| 无码A级毛片免费视频内谢| 8x8×在线永久免费视频| 久久这里只有精品国产免费10| 四虎影院免费在线播放| 午夜亚洲福利在线老司机| 中文字幕亚洲综合久久菠萝蜜| 亚洲精品午夜无码电影网| 亚洲宅男永久在线| 亚洲男人天堂2022| 美女被艹免费视频| 最新国产乱人伦偷精品免费网站| 777成影片免费观看| 日韩吃奶摸下AA片免费观看| 国产免费小视频在线观看| 在线观看亚洲天天一三视| 亚洲精品高清视频| 亚洲无人区码一二三码区别图片| 无忧传媒视频免费观看入口| 国产偷伦视频免费观看| 欧美在线看片A免费观看| 免费人成年轻人电影| 亚洲av永久无码精品古装片| 亚洲91精品麻豆国产系列在线 |