【数学建模】天然肠衣搭配问题衍生问题/线性规划限制条件建立问题

本文主要是介绍【数学建模】天然肠衣搭配问题衍生问题/线性规划限制条件建立问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

线性规划限制条件建立问题

  • 前景回顾/提出问题
    • 回顾1
    • 回顾2/问题提出
    • 解决前提
  • 解决方法
    • 坐标轴(区间)法
      • 总结

前景回顾/提出问题

回顾1

首先回顾一下DVD在线租赁问题
在 question2中,需要保证每个人都不会收到自己不喜欢的DVD,即客户在线订单数为0时候,不可以租给他。我直接给出答案了:
x i j ≤ o r d e r i j , i = 1 , 2 , 3 , . . n , j = 1 , 2 , 3 , . . m x_{ij} \le order_{ij} ,i=1,2,3,..n , j= 1,2,3,..m xijorderij,i=1,2,3,..n,j=1,2,3,..m

实际思路其实是
如果 o r d e r i j = 0 order_{ij} = 0 orderij=0,那么 x i j = 0 x_{ij} = 0 xij=0, 也就是说客户不喜欢我决定不租
反之 o r d e r i j > 0 order_{ij} \gt 0 orderij>0,那么 x i j = 0 / 1 x_{ij} = 0/1 xij=0/1,也就是说客户喜欢我自己决定租还是不租。

列表找规律还是尝试不同的不等式都可以在比较短的时间内想出正确答案。

回顾2/问题提出

接下来回顾一下天然肠衣搭配问题
其中手动进行局部最优解的时候,还有一个附带问题:
已知原料能捆137个成品三,那么用到最少种配方数是多少?
例如我用到了73种配方我就可以完成137个成品三,那么同样是做137个成品三,就比用到100种配方少。

当时求最多能捆多少个成品三的模型为:
设使用方案 i i i的次数为 y i y_i yi,原料按长度由小到大的总个数依次为 d 1 d 2 , . . . , d n d_1 d_2 ,...,d_n d1d2,...,dn
方案总数为 a a a;方案 i i i使用第 j j j种原料数量为 z i j z_{ij} zij
对于每一个原料我们都得
d i ≥ ∑ 1 ≤ j ≤ a y j ∗ z j i , 1 ≤ i ≤ n d_i \ge \sum_{1 \le j \le a} y_j*z_{ji} , 1\le i \le n di1jayjzji,1in
max ⁡ ∑ 1 ≤ i ≤ a y i \max \sum_{1\le i \le a}y_i max1iayi

现在 max ⁡ ∑ i = 1 a y i \max \displaystyle\sum_{i=1}^{a}y_i maxi=1ayi变成了 ∑ i = 1 a y i = 137 \displaystyle\sum_{i=1}^{a}y_i = 137 i=1ayi=137
求解问题也变成了求 max ⁡ ∑ i = 1 a y i > 0 \max \displaystyle\sum_{i=1}^{a}y_i\gt 0 maxi=1ayi>0
如果借鉴DVD在线租赁问题的思路就是, f i f_i fi为0/1变量
如果 y i > 0 y_i \gt 0 yi>0,那么 f i = 1 f_i = 1 fi=1 ,用了这种配方就
反之 y i = 0 y_i = 0 yi=0,那么 f i = 0 / 1 f_i = 0/1 fi=0/1 , 没用这种配方
min ⁡ ∑ i = 1 a f i \min \displaystyle\sum_{i=1}^{a} f_i mini=1afi
因为是求最小值( f i f_i fi自动取最小的那一个),所以实际上如果 y i = 0 y_i = 0 yi=0,那么 f i = 0 f_i = 0 fi=0是绝对成立的

但这一次就没那么简单了,不是简单的 y i ≤ f i y_i\le f_i yifi 或者 y i ≥ f i y_i\ge f_i yifi,所以不能轻易的得出答案
所以问题就是这个限制条件怎么写?

解决前提

1.不能破坏线性规划模型,即不能出现变量和变量相乘的情况
2.
如果 y i > 0 y_i \gt 0 yi>0,那么 f i = 1 f_i = 1 fi=1 ,用了这种配方就
反之 y i = 0 y_i = 0 yi=0,那么 f i = 0 / 1 f_i = 0/1 fi=0/1 , 没用这种配方
解决上面描述很容易想到用 i f if if语句,这里也不可以,也就是下面这种模型
f i = { 1 , y i > 0 1 , y i = 0 f_i = \begin{cases}1,y_i \gt 0\\1,y_i = 0\end{cases} fi={1,yi>01,yi=0

解决方法

坐标轴(区间)法

线性规划中 a ≤ b a\le b ab a ≥ b a\ge b ab是最常用的,也是能很好的约束
基本概念
≤ a \le a a ≥ a \ge a a分别是蓝色线和红色线表示的区间
在这里插入图片描述

解决天然肠衣搭配问题
那么变形一下上面的判断描述
如果 y i > 0 y_i \gt 0 yi>0,那么 f i = 1 f_i = 1 fi=1 ,用了这种配方就
反之 y i ≤ 0 y_i \le 0 yi0,那么 f i = 0 / 1 f_i = 0/1 fi=0/1 , 没用这种配方
如果定义 ≥ y \ge y y, y y y y 1 > 0 y_1\gt 0 y1>0 y 2 = 0 y_2 = 0 y2=0
就会出现以下两个区间,红色: ≥ y 2 \ge y_2 y2 , 蓝色: ≥ y 1 \ge y_1 y1
在这里插入图片描述

通过画图分析发现蓝色区间不包含0,也就是说只要我 y i > 0 y_i \gt 0 yi>0 时候,要求 f i > y i f_i \gt y_i fi>yi就能限制住 f i > 0 f_i \gt 0 fi>0,即 f i f_i fi不可能有0的取值了
而红色区间,带入同样的限制 f i > y i f_i \gt y_i fi>yi,得到 f i ≥ 0 f_i \ge 0 fi0,即 f i = 0 / 1 f_i = 0/1 fi=0/1和我们描述相符
现在问题就来了,虽然 y i > 0 y_i \gt 0 yi>0 时候 f i f_i fi不可能有0的取值了但也不能取1!
也就是说我 f i f_i fi还必须落在蓝色区域里,如果 y i ≤ + ∞ y_i\le +\infin yi+那就完蛋了,满足的式子只有 f i y i > y i f_iy_i \gt y_i fiyi>yi或者 y i ≤ + ∞ f i y_i \le +\infin f_i yi+fi,分别不满足解决前提2和不现实
但已知还有一个条件 ∑ i = 1 a y i = 137 \displaystyle\sum_{i=1}^{a}y_i = 137 i=1ayi=137,可以得出 y i ≤ 137 y_i \le 137 yi137
那么 137 f i > y i 137f_i \gt y_i 137fi>yi 这个限制条件就可以让, f i f_i fi取1。
综上所述, 137 f i 137f_i 137fi f i = 1 f_i=1 fi=1落在蓝色和红色区间,但当 f i = 0 f_i=0 fi=0只落在红色区间,也就完成了线性的限制约束条件。

这时候同样的方法重做DVD在线租赁问题
已知:
如果 o r d e r i j = 0 order_{ij} = 0 orderij=0,那么 x i j = 0 x_{ij} = 0 xij=0, 也就是说客户不喜欢我决定不租
反之 o r d e r i j > 0 order_{ij} \gt 0 orderij>0,那么 x i j = 0 / 1 x_{ij} = 0/1 xij=0/1,也就是说客户喜欢我自己决定租还是不租。
改变加简化为
如果 o r i ≤ 0 or_i \le 0 ori0,那么 x i = 0 x_i = 0 xi=0, 也就是说客户不喜欢我决定不租
反之 o r i > 0 or_i \gt 0 ori>0,那么 x i = 0 / 1 x_i = 0/1 xi=0/1,也就是说客户喜欢我自己决定租还是不租。

因为限制 o r i ≤ 0 or_i \le 0 ori0时候 x i x_i xi不能取1,所以在数轴上画出0坐标,考虑如果区间是往右延申是不会包括1的,所以定义 ≤ o r i \le or_i ori
在这里插入图片描述

注意:定义和最终限制往往是同号!

通过图分析可得 x i ≤ o r i x_i \le or_i xiori是满足条件的约束,并且也不存在说如果 o r i ≤ + ∞ or_i\le +\infin ori+那就完蛋了因为 x i ≤ o r i ≤ + ∞ x_i \le or_i \le +\infin xiori+

而上面的是需要 y i ≤ f i y_i \le f_i yifi ,只能 y i ≤ + ∞ f i ≤ + ∞ y_i \le +\infin f_i \le +\infin yi+fi+,明显是无法求解的

总结

线性规划的条件可以利用区间来表示范围,数轴则是更加清晰
0/1变量两个取值实际上就是数轴上的两个点
例如 a f i + b af_i+b afi+b,当 f i f_i fi取0/1实际上就是b和a+b两个点
≤ \le ≥ \ge 表示是区间
一般分析过后适当做线性变化即可得到想要的线性限制条件

这篇关于【数学建模】天然肠衣搭配问题衍生问题/线性规划限制条件建立问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975944

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g