一、整数规划模型及概念

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

从决策变量的取值范围来看,整数规划通常可以分为以下几种类型:
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 :5con(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得到更优的答案,在此就不再赘述了。

整数规划 - 数学建模相关推荐

  1. Python小白的数学建模课-04.整数规划

    整数规划与线性规划的差别只是变量的整数约束. 问题区别一点点,难度相差千万里. 选择简单通用的编程方案,让求解器去处理吧. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达 ...

  2. 数学建模之减肥计划 matlab编程,数学建模matlab算法大全第02章整数规划.pdf

    数学建模matlab算法大全第02章整数规划 第二章 整数规划 §1 概论 1.1 定义 规划中的变量(部分或全部)限制为整数时,称为整数规划.若在线性规划模型中, 变量限制为整数,则称为整数线性规划 ...

  3. 【数学建模】(十):Lingo使用:线性规划+非线性规划+整数规划

    [数学建模](十):Lingo使用:线性规划+非线性规划+整数规划 线性规划 运输问题 整数规划 非线性规划 线性规划 设x1x_1x1​桶牛奶生产A1A_1A1​, x2x_2x2​桶牛奶生产A2A ...

  4. 【数学建模】算法模型(一)|线性规划 整数规划 非线性规划 层次分析模型 灰色关联分析

    文章目录 1.线性规划 Linear Programming (LP) 1.1线性规划的matlab标准形式及软件求解 1.2 投资的收益和风险 2. 整数规划 2.1 整数规划和线性规划的关系 2. ...

  5. 数学建模算法与应用学习day1——线性规划问题整数规划问题

    以下内容来自司守奎编写的数学建模算法与应用学习,主要是记录自己的学习历程,转载还请标明出处! 一.线性规划 知识点 1.1线性规划问题 1.1.2线性规划解的概念 f = [-2 ; -3 ; 5]; ...

  6. 数学建模、运筹学之整数规划(原理、例题、代码)

    数学建模.运筹学之整数规划(原理.例题.代码) 一.何为整数规划? 二.整数规划与线性规划 三.分枝定界法 四.0-1整数规划 一.何为整数规划? 整数规划具有深远的实际应用价值,因为现实生活中的规划 ...

  7. 数学建模整理-线性规划、整数规划、非线性规划

    数学建模整理 线性规划 整数规划 整数规划特点 求解方法分类 (1)分枝定界法 (2) 割平面法 (3) 隐枚举法("0-1"整数规划) (4) 匈牙利法 (5) 蒙特卡洛法(随机 ...

  8. 还在为数学建模的事发愁?带你一起来看看数模竞赛中必备的经典算法

    前言 数学建模比赛是本科生和研究生阶段最重要的比赛之一,包括全国大学生数学建模竞赛(俗称"国赛")和美国大学生数学建模竞赛(俗称"美赛").在这些比赛中取得好成 ...

  9. 数学建模之运筹学问题

    目录 1.引言 2.常见模型与算法 3.问题描述 4.遗传算法 5.仿真结果 1.引言 运筹学问题,包括任务规划.分配.决策,是数学建模比赛中常见的问题(参见2018年"高教杯"数 ...

最新文章

  1. python非官方的二进制扩展包下载地址
  2. sizeof之字节对齐
  3. php nl2br() 函数
  4. aic bic mdl
  5. 上线清单 —— 20 个 Laravel 应用性能优化项
  6. .NET 指南:参数的设计
  7. html5 扩展属性,HTML5属性的介绍和扩展.doc
  8. Java对象转出json并过滤指定属性
  9. 清华计算机复试线2020,清华大学2020年研考复试线公布,复试时间待定
  10. 244. Shortest Word Distance II
  11. 如何连接到远程SQL Server
  12. 安装go编译器后没有gopath文件夹_Go 语言环境安装(集成 VS code)
  13. 离开阿里加盟复旦!大牛纷纷离职回归学界,撕下了国内大厂AI的最后遮羞布!大厂AI名存实亡?...
  14. 学习|全屏时钟|计时器APP横评
  15. ictclas4j java_使用ICTCLAS JAVA版(ictclas4j)进行中文分词
  16. Effectively Learning Spatial Indices(VLDB)
  17. 修改微信文件的默认保存位置
  18. Sublime Text 中文版安装和插件安装
  19. uniapp 实现聊天页面 textarea固定在底部且高度自增
  20. 你会阅读Java源码吗

热门文章

  1. python把excel变成ppt_【转】使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!
  2. 51node1006LCS
  3. 新生赛第一题:dls的黑粉
  4. 多个工作表合并到一个工作表
  5. android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”...
  6. 地心坐标系转地理坐标系(NED)
  7. Beyond Compare4过期使用方法
  8. QT的QTreeWidget节点触发事件(一)
  9. (3)verilog与VHDL两种语言编写二分频
  10. 数据库高级(校招冲刺必备)