整数规划 - 数学建模

一、整数规划模型及概念

规划问题的数学模型一般由三个因素构成 决策变量 目标函数 约束条件
数学规划是运筹学的一个重要分支,线性规划是数学规划的一个重要分支;
线性规划即以线性函数为目标函数,线性条件为约束条件;
如果一个线性规划模型中的部分或全部决策变量取整数值,则称该线性规划模型为整数线性规划模型,除此还有非线性整数规划。

从决策变量的取值范围来看,整数规划通常可以分为以下几种类型:
1、纯整数规划:全部决策变量都必须取整数值的整数规划模型;
2、混合整数规划:决策变量中有一部分必须取整数值,另一部分可以不取整数值的整数规划模型;
3、0-1整数规划:决策变量只能取0或1的整数规划。

二、整数规划模型求解及应用

整数线性规划模型的一般形式为
在这里插入图片描述

1、基于求解器求解

标准形式如下
在这里插入图片描述
解法:

[x, fval, exitflag, output] = intlinprog(f, intcon, A, b, Aeq, beq, lb, ub, x0, options)

其中
输入参数:
f 为系数向量,系数向量表示目标函数,列向量;
intcon 为整数约束组成的向量,它的值指示决策变量 x 中应取整数值的分量;
A 为线性不等式约束矩阵,A 表示约束中的线性系数;
b 为线性不等式约束向量,b 表示约束中的常向量;
Aeq 为线性等式约束矩阵,beq 为线性等式约束向量;
lb 为下界,ub 为上界;
x0为初始点,指定为实数数组。当 f 存在时,x0 中的元素数与 f 中的元素数相同。否则,该数字与 A 或 Aeq 的列数相同;
options 为 intlinprog 的选项。
输出参数:
x 为解,fval 为目标函数最优值;
exitflag 为算法停止条件,output 为求解过程摘要。

2、基于问题求解

首先需要用变量和表达式构造优化问题,然后用solve函数求解,详见例题。

三、例题

在这里插入图片描述

1、基于求解器求解

clc, clear
f = [1; 1; 1; 1; 1; 1]; % 目标函数系数矩阵
intcon = [1:6];	% 目标函数整数项
A = [1, 0, 0, 0, 0, 1; % 构造不等式约束系数矩阵
    1, 1, 0, 0, 0, 0; 
    0, 1, 1, 0, 0, 0; 
    0, 0, 1, 1, 0, 0; 
    0, 0, 0, 1, 1, 0; 
    0, 0, 0, 0, 1, 1];
b = [35; 40; 50; 45; 55; 30]; % 构造不等式约束常数矩阵
[x, fval] = intlinprog(f, intcon, -A, -b, [], [], zeros(6, 1)); % 调用求解器求解

2、基于问题求解

clc, clear
prob = optimproblem; % 定义优化问题,默认求最小
x = optimvar('x',6,'Type','integer','LowerBound',0);  % name为变量名称,n为变量维度,cstr为索引名称,Type为变量类型,continuous(默认实数)或integer(整数),LowerBound为下界,UpperBound为上界
prob.Objective = sum(x); % .Objective为目标函数,定义目标函数
con = optimconstr(6); % 创建一个由空优化约束组成的 6×1 数组,使用 constr 初始化用于创建约束表达式的循环
a = [35,40,50,45,55,30]; % 不等式常数项
con(1) = x(1)+x(6)>=35;	% 构造不等式约束
for i =1 :5
    con(i+1) = x(i)+x(i+1)>=a(i+1);
end
prob.Constraints.con = con;
[sol, fval, flag] = solve(prob), sol.x	% 求解

求得最优解为x1 = 35, x2 = 5, x3 = 45, x4 = 0, x5 = 55, x6 = 0,目标函数最优值为140。

四、蒙特卡洛法解决非线性整数规划

蒙特卡洛法又称计算机随机模拟法,是基于对大量事件的统计结果来实现一些确定性问题的计算。
非线性规划的解法虽然尚未成熟,但是非线性整数规划限定了变量为整数,从而整数解为有限个,为枚举法提供了方便,故在一定计算量的情况下,用蒙特卡洛法进行随机枚举可以得出一个较为满意的解。一些情况还可以使用Lingo得到更优的答案,在此就不再赘述了。

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风落_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值