定理解决非线性整数规划问题"/>
【MATLAB】使用蒙特卡洛(随机取样)定理解决非线性整数规划问题
非线性整数规划就是对于非线性函数f求最优解时自变量的值,其中要求自变量必须是整数
例题:
某厂向用户提供发动机,合同规定,第一、二、三季度末分别交货40台、60台、80台.每季度的生产费用为 (元),其中x是该季生产的台数.若交货后有剩余,可用于下季度交货,但需支付存储费,每台每季度4元.已知工厂每季度最大生产能力为100台,第一季度开始时无存货,每个季度生产费用是f(x)=50x+0.2x^2,问该厂每个季度应该生产多少台发动机,才能既满足交货合同,又使工厂所花费的费用最少?
函数定义
function [f,g]=fun1(x)f=50*x(1)+0.2*x(1)^2+50*x(2)+0.2*x(2)^2+50*x(3)+0.2*x(3)^2+4*(x(1)-40)+4*(x(2)+x(1)-40-60);
g=[-x(1)-40-x(1)-x(2)+100-x(1)-x(2)-x(3)+180];
end
matlab脚本定义
clc,clear;
rand('state',sum(clock));
p0=inf;tic
for i=1:10^7#生成10^7个数,一次次实验,最后得到最优解x=randi([0,100],1,3);[f,g]=fun1(x);if all(g<=0)if p0>fx0=x;p0=f;endend
end
x0,p0
toc
最终结果
x0 =50 60 70p0 =11280时间已过 9.921019 秒。
更多推荐
【MATLAB】使用蒙特卡洛(随机取样)定理解决非线性整数规划问题
发布评论