欢迎光临我的Blog,虽然这里还很简陋,但未来一定会焕发生机的!

整数规划的求解——炎泽汐 の Blog

数模 yanzexi 2年前 (2022-08-02) 772次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

需要使用的 Matlab 函数

clc,clear		%%清理工作空间,清除变量

unifrnd(a,b,[c,d]):生成 c 行 d 列的随机数矩阵,矩阵范围在 a~b 之间

使用 function 定义函数:
	function[输出内容] = 函数名(输入值)
	%%函数内容定义
	end

rand(‘state’,sum(clock))		%%根据当前时间定义

randi([a,b],c,d)		%%返回一个 a 行 b 列的随机数矩阵,随机数值在 c 到 d 之间

c(:)		%%将矩阵化为列矩阵

zeros(a,b)		%%获得一个全为 0 的 a 行 b 列矩阵

ones(a,b)		%%获得一个全为 1 的 a 行 b 列矩阵

reshape(x,[a,b])		%%将 x 转化为一个 a 行 b 列的矩阵

使用 Matlab 实现蒙特卡洛法求解整数规划

      蒙特卡洛法是一种基于随机取样的求解方法,是一种枚举法。其每次运算得出的结果都有可能不同,大多数情况下获得的都是满意解,难以取得最优解。


      求解非线性整数规划的 Matlab 程序如下:

clc,clear

function[f,g] = mengte(x)		%%输入 x 的整数向量,返回目标值和约束向量
f = 	;	%%定义目标函数
g = [];		%%定义约束向量
end

rand('state',sum(clock));
f_ans = 0;
x_ans = zeros(3,1);

for i = 1 : 10^6		%%循环 10^6 次
	x = ;		%%根据约束条件生成随机的 x 向量
	[f,g] = mengte(x);
	if all(g < 0)		%%判断符合约束条件的条件
		if(f > ans)		%%判断是否出现了更优值
			f_ans = f;
			x_ans = x;
		end
	end
end

x_ans,f_ans

Lingo 求解整数规划

      Lingo 可以直接求得全局最优解:

model:
	sets:
		row/1..4/:b;
		col/1..5/:c1,c2,x;
		link(row,col):a;
	endset

	data:
		c1 = ;
		c2 = ;
a = ;
b = ;
		endata

		max = ;		%%定义目标函数
		@for (row(i): @sum(col(j): a(i,j) * x(j) < b(i));		%%定义约束条件
		@for (col: @gin(x));		%%约束 x 为整数
		@for (col: @bnd(a, x, b));		%%约束 x 的值在 a 和 b 之间

Matlab 求解整数线性规划

      在 Matlab 中求解整数线性规划一般使用 intlinprog 函数进行求解,函数表达式为:
            [x,fval] = intlinprog(f,intcon,A,b,AEQ,beq,lb,ub)
      其中 intcon 规定那些变量取整数,如 intcon = 1:25 指 x1~x25 均为整数。
      但是其只能求解一维决策变量,因此在面对多维决策变量时应该将其化为一维变量进行求解。
      在 Matlab 中,线性整数规划的标准型如下:
整数规划的求解——炎泽汐 の Blog
      其中 x 均整数

喜欢 (0)
[炎泽汐de收款码]
分享 (0)

您必须 登录 才能发表评论!