對於線性規劃而言,有著成熟且有效的方法,而對於非線性整數規劃而言,沒有通解,儘管限制變數為整數而增加了難度,然而整數解為有限個,於是可以用列舉法求解方案。
當然在乙個自變數維度很大和取值範圍很寬的情況下,企圖用窮舉法計算最優值是不現實的,但是根據概率理論可知,完全可以得出乙份滿意解。
下面是matlab實現隨機取樣計算:
我們這裡取非線性規劃函式,定義目標函式f和約束向量g
function [f,g]
=mengte
(x);f=x
(1)^
2+x(
2)^2
+3*x
(3)^
2+4*
x(4)
^2+2
*x(5
)^2-
8*x(
1)-2
*x(2
)-3*
x(3)
-x(4
)-2*
x(5)
;g(1
)=sum(x)
-400;g
(2)=
x(1)
+2*x
(2)+
2*x(
3)+x
(4)+
x(5)
-800;g
(3)=
2*x(
1)+x
(2)+
6*x(
3)-200;g
(4)=
x(3)
+x(4
)+5*
x(5)
-200
;
主函式如下:
rand
('state'
,sum
(clock));
%採用時間作為隨機數的初始狀態,保證不會出現相同的隨機數
p0=0
;tic;
%開始計時
for i=1:
10^5 x=99*
rand(5
,1);
x1=floor
(x);
%x向下取整
x2=ceil
(x);
%x向下取整
[f,g]
=mengte
(x1);if
sum(g<=0)
==4if p0<=f
x0=x2;po=f;
endend[f,g]
=mengte
(x2);if
sum(g<=0)
==4if p0<=f
x0=x2;po=f;
endendend
x0po
toc%停止計時
執行結果為
>> main
x0 =262
99113po =
37269
時間已過 0.947124 秒。
由於是隨機取樣,所以每次執行的結果的可能不一樣,但是誤差不會太大,但對於比較標準的整數規劃模型,建議考慮用lingo求解。 非線性整數規劃 Matlab 隨機取樣計算法
matlab求下列整數 目標函式f,約束條件g function f,g mengte x f x 1 2 x 2 2 3 x 3 2 4 x 4 2 2 x 5 2 8 x 1 2 x 2 3 x 3 x 4 2 x 5 g 1 sum x 400 g 2 x 1 2 x 2 2 x 3 x 4 ...
Matlab產生隨機序列,並取樣
clear all m 10 bit數 符號數 n 100 總取樣數 l n m 每bit取樣數 emp rate 0.5 占空比 imp round rand 1,m round 四捨五入 rand m,n 產生 0,1 之間的均勻分布的隨機數,返回m n的矩陣 imp randi 0,1 1,m...
基於MATLAB的極值計算方法
通常,我們對資料節點得到的曲線 或折線 需要計算其波峰波谷,也就是極值點。數學上是通過一階導數等資訊來獲得極值點的,這裡通過一階微分來處理,得到極值資訊。輸入節點資料,要求計算波峰波谷 極大值 極小值 並作出標記。節點資訊 data 105.03 99.18 84.965 72.445 68.994...