資源分配問題是考慮如何把有限分配給若干個工程的問題。參考《演算法設計與分析》
下面直接貼**:
//為了和書上的內容一致,我的變數名、變數所代表的意思和書上的幾本一致
#include
#include
#define m 8 //可分配資源份額
#define n 3 //工程專案個數
using namespace std;
//定義演算法所需的資料結構
int g[n][m+1]=,,};
int optg; //最優分配時所得的總利潤
int optq[n]; //最優分配時各項工程所得的份額
//演算法的工作單元
int f[n][m+1];//前i項工程分配不同份額資源是可得到的最大利潤
int d[n][m+1];//是使f[i][x]最大時,第i項工程分配的份額
int g[n]; //只分配前i項工程時,可得到的最大利潤
int q[n]; //只分配前i項工程時,第i項工程最優分配份額
int optx; //最優分配時的資源最優分配份額
int kk; //最優分配時的工程專案的最大編號
void main(void)
, //這樣是錯的,這樣賦值沒有開闢空間,需要new函式才可以
, //
//};*/
//第一階段
for (int v=0;v
//其他階段
int vv;
int b_num;
for(int k=1;k
}f[k][i]=max_total;
d[k][i]=b_num;
}int uu=0;
int a_num;
for(int l=0;l
}g[k]=uu;
q[k]=a_num;
}//第一種細節處理方法 ,浪費空間
/*int c_num=0;
int f_num;
for(int ll=0;ll
}optg=c_num;
kk=f_num;
optx=q[f_num];
*///第二種細節處理方法
optg=g[0];
optx=q[0];
kk=0;
for(int i=1;i
}if(kk
}for(int u=n-1; u>=0; u--)
for(int r=0;r
cout<<"最高利潤為:"《為了更好的理解資源分配問題,特推薦 這篇部落格和《演算法設計與分析》143頁
有資金4萬元,投資a、b、c三個專案,每個專案的投資效益與投入該項目的資金有關。三個專案a、b、c的投資效益(萬噸)和投入資金(萬元)的關係見下表:
專案 投入資金ab
c1萬元
15萬噸 13
萬噸 11萬噸 2
萬元 28萬噸 29
萬噸 30萬噸 3
萬元 40萬噸 43
萬噸 45萬噸 4
萬元 51萬噸 55
萬噸 58萬噸
求對三個專案的最優投資分配,使總投資效益最大。
階段k:每投資乙個專案作為乙個階段;
狀態變數xk
:投資第k
個專案前的資金數;
決策變數dk
:第k個專案的投資;
決策允許集合:0
≤dk≤xk
狀態轉移方程:xk+1=xk-dk
階段指標:vk(xk,dk)
見表中所示;
遞推方程:fk(xk)=max
終端條件:f4(x4)=0
k=4,
f4(x4)=0
k=3,0≤
d3≤x3,
x4=x3-d3 x3
d3(x3)x4
v3(x3,d3)
v3(x3,d3)+f4(x4)
f3(x3)
d3*000
00+0=0 0
0101
00+0=0 11
11011
11+0=11* 2
0200+0=0 30
21111
11+0=11 2
03030+0=30* 3
0300+0=0 45
31211
11+0=11 2
13030+0=30 3
04545+0=45* 4
0400+0=0 58
41311
11+0=11 2
23030+0=30 3
14545+0=45 4
05858+0=58*
k=2,0
≤d2≤x2
,x3=x2-d2 x2
d2(x2)x3
v2(x2,d2)
v2(x2,d2)+f3(x3)
f2(x2)
d2*000
00+0=0 0
0101
00+11=11 13
11013
13+0=13* 2
0200+30=30* 30
01113
13+11=24 2
02929+0=29 3
0300+45=45* 45
01213
13+30=43 2
12929+11=40 3
04343+0=43 4
0400+58=58 59
21313
13+45=58 2
22929+30=59* 3
14343+11=54 4
05555+0=55
k=1,0
≤d1≤x1
,x2=x1-d1 x1
d1(x1)x2
v1(x1,d1)
v1(x1,d1)+f2(x2)
f1(x1)
d1*404
00+59=59 60
11315
15+45=60* 2
22828+30=58 3
14040+13=53 4
05151+0=51
最優解為x1=4, d1*=1, x2=x1-d1=3, d2*=0, x3=x2-d2*=3, d3=3, x4=x3-d3=0
,即專案a
投資1萬元,專案b
投資0萬元,專案c
投資3萬元,最大效益為60
萬噸。
動態規劃 資源離散分配問題
問題 資源離散分配問題 動態規劃的思想在於把乙個大問題化成一些同型別的子問題,然後逐個求解。從邊界條件開始遞推,每乙個子問題的解決,均使用到了前面子問題的最優結果,對於本題而言,就是要在逆向遞推的過程中,不斷更新 表與問題的最佳選擇,具體的 如下 import numpy as np 動態規劃 資源...
動態規劃 資源分配
動態規劃的決策不是線性的而是全面考慮到各種不同情況分別進行決策,最後通過多階段決策逐步找出問題最優解。而當前決策也會依賴於上一階段的決策,此時便會發生狀態的轉移。動態規劃演算法可以說是一種 聰明的蠻力法 因為動態規劃是會考慮到每一種可能,而聰明的地方是相對於蠻力法,它去掉了很多沒必要的運算。例1 資...
43 動態規劃 機器分配問題
import random as rd from pyscipopt import model,quicksum def sub ll print l,digit s for i in range len l s s str l i temp l i digit temp 1 while temp ...