数学规划 (线性,非线性,整数)

unifrnd函数

博客园较详细解释
均匀分布随机数:
均匀分布是指整个样本空间中的每一个样本点对应的概率(密度)都是相等的。根据样本空间是否连续,又分为离散均匀分布和连续均匀分布。均匀分布可以算作是最简单的概率分布。从均匀分布中进行采样,即生成均匀分布随机数,几乎是所有采样算法都需要用到的基本操作。

1.unifrnd(3,5)
产生一个3~5的均匀随机数

>> unifrnd(3,5)
ans =
    4.7768
>> unifrnd(3,5)
ans =
    4.6694
>> unifrnd(3,5)
ans =
    4.5639
>> unifrnd(3,5)
ans =
    4.7718
>> unifrnd(3,5)
ans =
   4.6463
>> unifrnd(3,5)
ans =
    4.0015

A和B可以是向量也可以是标量。

若两个都是向量,则两者都是列向量或都是行向量,而且维数相等。从A到B产生一系列区间,区间个数等于他们的维数;

若其中恰有一个是向量,假设A为向量,则区间个数等于A的维数;

若两个均为标量,且A <= B,区间个数为1,且区间为[A,B]。然后在这一系列区间中随机产生连续均匀分布的数组R并返回之。

>> x=[1:9];
y=[2:10];
unifrnd(x,y)
ans =
    1.4254    2.8143    3.8355    4.8910    5.2735    6.8015    7.6149    8.1640    9.0562
    
   %% 从x到y产生区间[1,2],[2,3],[3,4],
    ... [4,5],[5,6],[6,7],[7,8],[8,9],
    ... [9.10].然后从每个区间产生一个随机数,得到R

unifrnd (a, b, m, n); 产生m*n阶[a, b]均匀分布

线性规划

[x,fval]=linprog(f,a,b,aeq,beq,lb,ub)

整数线性规划

[x,fval]=intlinprog(f,intcon,a,b,aeq,beq,lb,ub)

(非线性规划)

在这里插入图片描述
c(x),ceq(x)是非线性向量函数。

[xmin,ymin]=fmincon(函数名,x0,线性不等式约束,线性等式约束,x下界和上届,M文件定义的非线性向量约束c(x),ceq(x))(局部最优解)

(非线性规划举例)

在这里插入图片描述

%%
clc, clear
fun1 = @(x) sum(x.^2)+8;%目标函数

[x,y]=fmincon(fun1,rand(3,1),[],[],[],[],zeros(3,1),[],@fun2)
 %这里注意fun2前面要带上@,否则会报错
function [c,ceq]=fun2(x)
c=[-x(1)^2+x(2)-x(3)^2
x(1)+x(2)^2+x(3)^3-20];  %非线性不等式约束
ceq=[-x(1)-x(2)^2+2
x(2)+2*x(3)^2-3]; %非线性等式约束
end

(非线性整数规划举例)

在这里插入图片描述

%%
%%%%%%%%%非线性整数规划%%%%%%%%
 clear
%rng('shuffle')  %根据当前时间为随机数生成器提供种子
rng(0) %进行一致性比较,每次产生的随机数是一样的
p0=0; 
n=10^6; 
tic    %计时开始
for i=1:n
   x=randi([0,99],1,5); %产生一行五列的区间[0,99]上的随机整数
   [f,g]=mengte(x);
   if all(g<=0)   %判断是否满足约束条件
       if p0<f
           x0=x; %记录下当前较好的解
           p0=f; %记录下当前较好的解
       end
   end
end
x0, p0, toc    %计时结束
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=[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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值