蒙特卡洛法(转帖)
来源:互联网 发布:小米算法工程师 编辑:程序博客网 时间:2024/06/05 16:53
蒙特卡洛法(随机取样法)
前面介绍的常用的整数规划求解方法,主要是针对线性整数规划而言,而对于非线性整数规划目前尚未有一种成熟而有效的求解方法,因为非线性规划本身的通用有效解法尚未找到,更何况是非线性整数规划。
然而,尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限个,于是为枚举法提供了方便。当然,当自变量维数很大和取值范围很宽情况下,企图用显枚举法(即穷举法)计算出最优值是不现实的,但是应用概率理论可以证明,在一定的计算量的情况下,完全可以得出一个满意解。
例7 已知非线性整数规划为:
s.t.
对该题,目前尚无有效方法求出准确解。如果用显枚举法试探,共需计算
下面就分析随机取样采集
不失一般性,假定一个整数规划的最优点不是孤立的奇点。
假设目标函数落在高值区的概率分别为0.01,0.00001,则当计算
解 ( i )首先编写M文件mente.m定义目标函数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)-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)+6*x(5)-800;
g(3)=2*x(1)+x(2)+6*x(3)-200;
g(4)=x(3)+x(4)+5*x(5)-200;
( ii )编写如下程序求问题的解:
rand('state',sum(clock));
p0=0;
tic
for i=1:10^5
x=99*rand(5,1);
x1=floor(x);x2=ceil(x);
[f,g]=mengte(x1);
if sum(g<=0)==4
if p0<=f
x0=x1;p0=f;
end
end
[f,g]=mengte(x2);
if sum(g<=0)==4
if p0<=f
x0=x2;p0=f;
end
end
end
x0,p0
toc
§5 整数规划的计算机解法
整数规划问题的求解可以使用Lingo等专用软件。对于一般的整数规划规划问题,无法直接利用Matlab的函数,必须利用Matlab编程实现分枝定界解法和割平面解法。但对于指派问题等特殊的
例8 求解下列指派问题,已知指派矩阵为
解:编写Matlab程序如下:
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5
8 4 2 3 5;9 10 6 9 10];
c=c(:);
a=zeros(10,25);
for i=1:5
a(i,(i-1)*5+1:5*i)=1;
a(5+i,i:5:25)=1;
end
b=ones(10,1);
[x,y]=linprog(c,[],[],a,b,zeros(25,1),ones(25,1))
求得最优指派方案为
下一页
- 蒙特卡洛法(转帖)
- 蒙特卡洛法之MATLAB实现
- 蒙特卡洛法多线程求圆周率
- 转帖
- 转帖~~~~
- 转帖
- 转帖
- 转帖
- 转帖
- 转帖
- 转帖
- 转帖
- 转帖
- 转帖
- 转帖
- 转帖
- 转帖
- 蒙特卡洛法(随即取样法) 数模 笔记
- 《JDOM操作XML文件》的补充(增加搜索查询功能)
- Money
- Windows 2000缓冲区溢出入门
- 李开复博士写给中国大学生的第一封信
- 虚拟内存的优化
- 蒙特卡洛法(转帖)
- vbscript下格式化时间和日期的函数
- 李开复给中国学生的第二封信:从优秀到卓越
- 对synchronized(this)的一些理解
- 1.linux文件操作常用命令
- Windows 2000缓冲区溢出技术原理
- 过年了最近加班干活,所以没时间来更新
- python 命令行的一个发现...
- 试一试Blog好用不