例题 非线性整数规划

例1

题目如下
请添加图片描述
采用蒙特卡洛法(随机取样法)
虽然计算最优解不太现实,但是应用概率理论可以证明,在一定的计算量的情况下,完全可以得出一个满意解
此算法实现非常简单,易于理解,暴力循环随机数维护最大值即可

1)首先编写 M M M 文件 m e n g t e . m mengte.m mengte.m 定义目标函数 f f f约束向量函数 g g g,程序如下
注意到 g g g 的本质是一个 5 × 1 5\times1 5×1 的列向量

function [f,g]=mengte(x);
%输入参数x, 返回值[f,g], 函数名称mengte
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=[sum(x)-400
    x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
    2*x(1)+x(2)+6*x(3)-200
    x(3)+x(4)+5*x(5)-200];
end

2)编写 M M M 文件 w o r k . m work.m work.m 求解问题答案

rand('state', sum(clock));
Max=-10000000;%函数最值初始化为负无穷
tic%显示运行时间
for i=1:10^6
    x=99*rand(5,1);%生成5*1的随机实数矩阵
    x1=floor(x);x2=ceil(x);%取整
    [f,g]=mengte(x1);
    if sum(g<=0)==4%输入参数为x1时,如果所有不等式都满足
        if Max<=f%维护一下函数最值
            Max=f;
            ans=x1;
        end
    end
    [f,g]=mengte(x2);%重复
    if sum(g<=0)==4
        if Max<=f
            Max=f;
            ans=x2;
            
        end
    end
end
ans,Max
toc

lingo解法

model:
sets:
row/1..4/:b;
col/1..5/:c1,c2,x;
link(row,col):a;
endsets
data:
c1=1,1,3,4,2;
c2=-8,-2,-3,-1,-2;
a=1 1 1 1 1
  1 2 2 1 6
  2 1 6 0 0
  0 0 1 1 5;
b=400,800,200,200;
enddata
max=@sum(col:c1*x^2+c2*x);
@for(row(i):@sum(col(j):a(i,j)*x(j))<b(i));
@for(col:@gin(x));
@for(col:@bnd(0,x,99));
end

例二

请添加图片描述

请添加图片描述

请添加图片描述
解:
1)编写 M M M 文件 f u n 1. m fun1.m fun1.m 定义目标函数

function f=fun1(x);
f=sum(x.^2)+8;

2)编写 M M M 文件 f u n 2. m fun2.m fun2.m 定义非线性约束条件

function [g,h]=fun2(x);
g=[-x(1)^2+x(2)-x(3)^2%非线性不等式约束
    x(1)+x(2)^2+x(3)^3-20];
h=[-x(1)-x(2)^2+2%非线性等式约束
    x(2)+2*x(3)^2-3];

3)编写主程序

options=optimset('largescale', 'off');
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],...
    zeros(3,1),[],'fun2',options)

可以求得 x 1 = 0.5522 , x 2 = 1.2033 , x 3 = 0.9478 x_1=0.5522,x_2=1.2033,x_3=0.9478 x1=0.5522,x2=1.2033,x3=0.9478 时,最小值 y = 10.6511 y=10.6511 y=10.6511

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值