日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【数学建模】day02-整数规划

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数学建模】day02-整数规划 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基本類似于中學(xué)講的整數(shù)規(guī)劃--線性規(guī)劃中變量約束為整數(shù)的情形。

目前通用的解法適合整數(shù)線性規(guī)劃。不管是完全整數(shù)規(guī)劃(變量全部約束為整數(shù)),還是混合整數(shù)規(guī)劃(變量既有整數(shù)又有實(shí)數(shù)),MATLAB都提供了通用的求解函數(shù)。

?

?

一、0-1型整數(shù)規(guī)劃

這類規(guī)劃將變量限制為0和1,有時(shí)候多個(gè)規(guī)劃問(wèn)題可以通過(guò)引入0-1變量將問(wèn)題統(tǒng)一在一個(gè)規(guī)劃問(wèn)題中討論。例如:

擁有相互排斥的規(guī)劃約束:

一般的,

?

?

二、0-1整數(shù)規(guī)劃的一個(gè)解法:隱枚舉法

因?yàn)樽兞康娜≈凳侨?-1的,所以可以枚舉所有取值求得極大/極小值。例如,求解

(1)試探一個(gè)可行解(x1,x2,x3)=(1,0,0),相應(yīng)的目標(biāo)函數(shù)值是3。暫做最優(yōu)解。

(2)繼續(xù)試探其他可行解。倘若目標(biāo)函數(shù)值小于3則不考慮,這相當(dāng)于增加了目標(biāo)大于等于3的又一個(gè)約束。否則目標(biāo)函數(shù)值大于3,則新的可行解暫做最優(yōu)解,更新當(dāng)前最優(yōu)目標(biāo)函數(shù)值,重復(fù)(2)

(3)直到:枚舉完所有可行解。

?

三、固定費(fèi)用問(wèn)題

舉例說(shuō)明這類問(wèn)題是:有三種產(chǎn)品投資方式,相應(yīng)增加A產(chǎn)品投資會(huì)使得A的固定成本上升,而由于產(chǎn)品產(chǎn)量增加使得單個(gè)產(chǎn)品費(fèi)用下降,問(wèn)如何投資使得成本最低。

解決這個(gè)問(wèn)題的一個(gè)方法可以是:列成本函數(shù),引入0-1變量統(tǒng)一到一個(gè)規(guī)劃問(wèn)題中。具體求解不贅述。

?

四、非線性整數(shù)規(guī)劃的一個(gè)方法:蒙特卡洛法

盡管整數(shù)規(guī)劃由于限制變量為整數(shù)而增加了難度;然而又由于整數(shù)解是有限個(gè),于是為枚舉法提供了方便。

當(dāng)然,當(dāng)自變量維數(shù)很大和取值范圍很寬情況下,企圖用顯枚舉法(即窮舉法)計(jì)算出優(yōu)值是不現(xiàn)實(shí)的,但是應(yīng)用概率理論可以證明,在一定的計(jì)算量的情況下(這里指蒙特卡羅法隨機(jī)抽取可行點(diǎn)求解近似解),完全可以得出一個(gè)滿意解。

所謂蒙特卡洛法(隨機(jī)取樣),是指對(duì)于計(jì)算量過(guò)大的問(wèn)題,通過(guò)隨機(jī)取樣計(jì)算部分,而非整體,來(lái)降低計(jì)算量的方法。這通常是近似解,但概率統(tǒng)計(jì)的方法證明,這是可靠的。

蒙特卡洛的應(yīng)用實(shí)例

(1)計(jì)算面積:計(jì)算y=x^2,y=12-x與x軸在第一象限圍城的曲邊三角形的面積。

方法:利用蒙特卡羅法。在矩形(0,0),(0,9),(12,9),(12,0)中隨機(jī)生成n個(gè)點(diǎn),統(tǒng)計(jì)落在曲邊三角形內(nèi)的點(diǎn)個(gè)數(shù),計(jì)算頻度即為曲邊三角形與矩形的面積之比。

?

使用matlab生成一維均勻分布隨機(jī)數(shù):R = unifrnd(A,B):生成區(qū)間(A,B)內(nèi)的隨機(jī)數(shù),A,B可以是向量。R = unifrnd(A,B,M,N):生成區(qū)間(A,B)內(nèi)的M*N個(gè)隨機(jī)數(shù)。R = unifrnd(A,B,[M,N]):同上。生成二維均勻分布隨機(jī)數(shù)則由一維組合而成。

?

matlab實(shí)現(xiàn):

?

1 clc,clear 2 x = unifrnd(0,12,1,10000000); 3 y = unifrnd(0,9,1,10000000); 4 pinshu = sum(y<x.^2 & x<=3) + sum(x>3 & y <12-x); 5 area = pinshu/10000000*12*9; 6 area

?

?

?

(2)一個(gè)非線性規(guī)劃蒙特卡洛求解實(shí)例

使用:產(chǎn)生隨機(jī)數(shù)種子:為了防止相同狀態(tài)開(kāi)始會(huì)產(chǎn)生相同的偽隨機(jī)數(shù)(特別是程序中有l(wèi)oop)1. rand('state',sum(100*clock)):根據(jù)當(dāng)前時(shí)間,已經(jīng)不推薦使用2. rand('twister',mod(floor(now*8640000),2^31-1)):也可以3. rng命令

注:

?

實(shí)現(xiàn):

先定義函數(shù):

1 function [f,g] = mente(x) 2 f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(3) 3 4 -x(4)-2*x(5); 5 g=[sum(x)-400 6 7 x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800 8 9 2*x(1)+x(2)+6*x(3)-200 10 11 x(3)+x(4)+5*x(5)-200];

?再求解:

1 clc,clear 2 rand('state',sum(clock)); 3 p0 = 0; 4 tic 5 for i = 1:10^6 6 x = 99*rand(5,1); %rand(5,1)生成5行1列0-1上的均勻分布隨機(jī)數(shù) 7 x1 = floor(x); 8 x2 = ceil(x); 9 [f,g] = mente(x1); 10 if sum(g<=0) == 4 11 if p0 <= f 12 x0 = x1; 13 p0 = f; 14 end 15 end 16 [f,g] = mente(x2); 17 if sum(g<=0)==4 18 if p0<=f 19 x0 = x2; 20 p0 = f; 21 end 22 end 23 end 24 x0 25 p0 26 toc

?

五、指派問(wèn)題

分配n人去做n個(gè)任務(wù),每人做且只做一項(xiàng)任務(wù)。第i個(gè)人做第j項(xiàng)任務(wù),花費(fèi)cij時(shí)間。問(wèn)如何分配人去做任務(wù),使得總時(shí)間花費(fèi)最少。

可以看出,花費(fèi)cij構(gòu)成矩陣,稱為指派矩陣。引入0-1變量矩陣n*n,則該矩陣每行每列只有一個(gè)1,其余為0,為1代表i做任務(wù)j,轉(zhuǎn)化為一個(gè)整數(shù)規(guī)劃問(wèn)題。

匈牙利算法可解。

?

六、整數(shù)規(guī)劃的matlab通用解法

函數(shù):

[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

param:

  f:目標(biāo)函數(shù)系數(shù)列向量

  intcon:整數(shù)變量的地址,如變量有x1,x2,x3,若x2,x3為整數(shù)變量,則intcon = 2:3

  A,b對(duì)應(yīng)不等約束

  Aeq,beq對(duì)應(yīng)等式約束

  lb,ub對(duì)應(yīng)邊界約束

return:

  x:取得最優(yōu)值的對(duì)應(yīng)變量取值

  fval:最優(yōu)值。同理,這是求標(biāo)準(zhǔn)型即min,若求max則目標(biāo)函數(shù)求反

求解實(shí)例:

(1)求解指派問(wèn)題:已知指派矩陣為


1 clc,clear 2 c = [3 8 2 10 3; 3 8 7 2 9 7; 4 6 4 2 7 5; 5 8 4 2 3 5; 6 9 10 6 9 10]; 7 c = c(:); 8 a = zeros(10,25); 9 intcon = 1:25; 10 for i = 1:5 11 %這是把二維矩陣轉(zhuǎn)換成一維,要滿足一個(gè)人只做一個(gè)任務(wù),一個(gè)任務(wù)只被一個(gè)人做的等式條件,共5*2個(gè)條件 12 a(i,(i-1)*5+1:5*i)=1; 13 a(5+i,i:5:25)=1; 14 end 15 b = ones(10,1); 16 lb = zeros(25,1); 17 ub = ones(25,1); 18 [x,y] = intlinprog(c,intcon,[],[],a,b,lb,ub); 19 x = reshape(x,[5,5])

?

?

?

也就是相應(yīng)C矩陣,取xij1則對(duì)應(yīng)i做任務(wù)j。

(2)求解混合整數(shù)規(guī)劃問(wèn)題

  min z = –3x1 –2x2 – x3

  s.t.

    x1 + x2 + x3 <=7,

    4x1 + 2x2 + x3 =12,

    x1,x2 >=0

    x3 = 0或1

分析知,只有x3是0-1整數(shù)變量,則intcon = 3

求解:

?

1 clc,clear 2 f = [-3;-2;-1]; 3 A = [1,1,1]; 4 b = 7; 5 Aeq = [4,2,1]; 6 beq = 12; 7 lb = zeros(3,1); 8 ub = [inf;inf;1]; 9 intcon = 3; 10 [x,y] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub); 11 x 12 y


?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/duye/p/9327955.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的【数学建模】day02-整数规划的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。