【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>f
            x0=x;p0=f;
        end
    end
end
x0,p0
toc

最终结果

x0 =

    50    60    70


p0 =

       11280

时间已过 9.921019 秒。

你可能感兴趣的:(Matlab)