蒙特卡洛的方法又稱為隨機取樣法,所以他是根據大量隨機數來跑出滿意解
比如上一章用遺傳演算法的完全可以用蒙特卡洛方法(一口血吐出....)
以下為c語言**:
#include #include #include #include int check(int x)
int main()
}printf("最大值為:%d\n",max);
for (j=0;j<5;j++)
printf("%d ",ans[j]);
}
2.1:
換元,另y=x1*x2,接下來挺難想到的~~
0<=x1<=1;
0<=x2<=1;
故(x1-1)*(x2-1)>=0
x1*x2-x1-x2+1>=0
x1*x2>=x1+x2-1
y>=x1+x2-1
(x1-1)*x2<=0
x1*x2-x2<=0
y<=x2
同理得y<=x1
綜上 x1+x2-1<=y<=x1
x1+x2-1<=y<=x2
>> f=[-1 0 1 -1];
>> a=[-2 3 1 0;
1 1 0 -1;
-1 0 0 1;
0 -1 0 1];
>> b=[3;1;0;0];
>> c=[1,2,3,4];
>> [x,fval]=intlinprog(f,c,a,b,,,zeros(4,1),ones(4,1))
2.2設xi為第i個小區是否被選,選為1,不被選為0
minz=x1+x2+x3+x4+x5+x6
對於每乙個小區又必須要有一所學校
x1+x2+x3>=1
x2+x4>=1
x3+x5>=1
x4+x6>=1
x1+x2+x3>=1
x5+x6>=1
x1>=1
x2+x4+x6>=1
>> f=[1,1,1,1,1,1];
>> a=[1,2,3,4,5,6];
>> b=[-1 -1 -1 0 0 0;0 -1 0 -1 0 0;0 0 -1 0 -1 0;0 0 0 -1 0 -1;-1 -1 -1 0 0 0;0 0 0 0 -1 -1;-1 0 0 0 0 0;0 -1 0 -1 0 -1];
>> c=[-1;-1;-1;-1;-1;-1;-1;-1];
>> [x,fval]=intlinprog(f,a,b,c,,,zeros(6,1),ones(6,1))
例2.3題目描述貌似有點問題,搜了下答案應該意思是每個企業有且只有1臺,每乙個裝置至少要購入一件。
整數規劃問題,用蒙特卡洛方法可解。
#include #include #include #include int value[7][5];
void init()
int check(int x)
int find(int x)
int main()
}printf("最大值為:%d\n",max);
for (i=1;i<=6;i++)
printf("%d ",ans[i]);
}最大利潤為44
數學建模之蒙特卡洛演算法
蒙特卡羅方法又稱統計模擬法 隨機抽樣技術,是一種隨機模擬方法,以概率和統計理論方法為基礎的一種計算方法,是使用隨機數 或偽隨機數 來解決很多計算問題的方法。將所求解的問題同一定的概率模型相聯絡,用電子計算機實現統計模擬或抽樣,以獲得問題的近似解。為象徵性地表明這一方法的概率統計特徵,故借用賭城蒙特卡...
蒙特卡洛演算法
從今天開始要研究sampling methods,主要是mcmc演算法 contents 1.蒙特卡洛介紹 2.蒙特卡洛的應用 3.蒙特卡洛積分 1.蒙特卡洛介紹 蒙特卡羅方法 monte carlo method 也稱統計模擬方法,是二十世紀四十年代中期由於科學技術的 發展和電子計算機的發明,而被...
蒙特卡洛演算法
問題描述 在數值積分法中,利用求單位圓的1 4的面積來求得pi 4從而得到pi。單位圓的1 4面積是乙個扇形,它是邊長為1單位正方形的一部分。只要能求出扇形面積s1在正方形面積s中佔的比例k s1 s就立即能得到s1,從而得到pi的值。怎樣求出扇形面積在正方形面積中佔的比例k呢?乙個辦法是在正方形中...