浅谈Python数学建模之整数规划

目录
  • 一、从线性规划到整数规划
    • 1.1、为什么会有整数规划?
    • 1.2、四舍五入就能得到整数解吗?
  • 二、整数规划的求解方法
    • 2.1、分支定界法(Branch and bound)
    • 2.2、割平面法(Cutting plane)
    • 2.3、整数规划的编程方案
  • 三、PuLP 求解整数规划问题
    • 3.1、案例问题描述
    • 3.2、建模过程分析
      • 3.2.1、问题定义
      • 3.2.2、模型构建
      • 3.2.3、模型求解
    • 3.3、Python 例程
    • 3.4、Python 例程运行结果

一、从线性规划到整数规划

1.1、为什么会有整数规划?

线性规划问题的最优解可能是分数或小数。整数规划是指变量的取值只能是整数的规划。

这在实际问题中很常见,例如车间人数、设备台数、行驶次数,这些变量显然必须取整数解。

根据对变量的不同情况,整数规划又可以分为:

  • 完全整数规划,全部变量都要求是整数;
  • 混合整数规划,部分变量要求是整数;
  • 0-1整数规划,变量的取值只能是 0 或 1;
  • 混合0-1规划,部分变量的取值只能是 0 或 1。

0-1整数规划 是非常重要也非常特殊的整数规划,需要在另外的文章进行讨论。

1.2、四舍五入就能得到整数解吗?

整数规划问题与线性规划问题的区别只是增加了整数约束。这看上去好像只要把线性规划得到的非整数解舍入化整,就可以得到整数解,并不是多么复杂的问题。

但是问题并没有这么简单。化整后的解不仅不一定是最优解,甚至不一定是可行解的——线性规划的最优解,取整后可能就不满足约束条件了。

那么,不要按四舍五入取整,而是向满足约束条件的方向取整,是不是就可以呢?这是很好的想法,通常这样可以获得可行解,但却不一定是最优解了。

因此,整数规划问题比线性规划复杂的多,以至于至今还没有通用的多项式解法,也就是说算法复杂度与问题规模成指数关系(NP问题)。还没有意识到与问题规模指数关系意味着什么吗?就是那个在象棋棋盘上放麦子,每格比前一格加倍的故事。

问题区别一点点,难度却相差千万里。小白与学霸,差距其实并不大。

二、整数规划的求解方法

2.1、分支定界法(Branch and bound)

分支定界法的基本思想是把原问题(整数规划问题)转换为一个个线性规划问题来处理,并在求解这些线性规划问题的过程中不断追踪原问题的上界(最优可行解)和下界(最优线性松弛解)。

分支定界法把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标上界,称为定界。每次分枝后,对于超出已知可行解集目标值的那些子集不再进一步分枝,就可以删减很多子集,这称为剪枝。

数学课代表的说法是:设有最大化的整数规划问题 A,先解与之相应的线性规划问题 B,若 B 的最优解不符合 A 的整数条件,则 B 的最优目标函数必是 A 的最优目标函数 z 的上界,记为 z2,而 A 的任意可行解的目标函数值将是 z 的一个下界 z1。分支定界法就是将 B 的可行域分成子区域(分支)的方法,逐步减小 z2 和增大 z1,最终求到 z*。

分支定界法是一个迭代算法,随着迭代过程不断更新上界和下界,直到上界和下界非常接近时结束。通常设置 Gap < 0.1%,就可把当前的最优可行解近似为问题的全局最优解了。因此,分支定界法的“收敛” 不是分析意义上的而是算法意义上的,优化结果是近似解而不是精确解。

分支定界法不用区分完全整数规划与混合整数规划,算法便于实现,但计算量比较大。

2.2、割平面法(Cutting plane)

割平面法的基本思路是先求解普通线性规划问题的最优解,再对非整数解添加约束条件使可行域缩小,如此反复求解添加了约束条件的普通线性规划问题,直到得到整数解。

也就是说,先不考虑整数约束条件,直接求解松弛问题的最优解,如果满足整数条件就结束了,如果不满足整数条件,就在此非整数解的基础上增加新的约束条件重新求解。这个新增加的约束条件称为割平面,对松弛问题的可行域割一刀,割去松弛问题的部分非整数解。经过有限次的反复切割,必定可在缩小的可行域的一个整数极点上达到整数规划问题的最优解 。

割平面法的计算量比较小,但对问题的结构及求解的要求较高,算法比较复杂。

2.3、整数规划的编程方案

在各种算法的介绍和评价中,有时会说“算法比较简单,编程比较容易”。对此小白千万不要当真。不论分支定界法还是割平面法,小白不要说自己按照算法步骤一步步编程实现,就是给你现成的程序估计你也看不懂的。这很正常,就算大神也没几个人能看懂哪怕是自己写出来的算法。

但是如果给你程序也不会使用,那就是问题了。不幸的是,这是数学建模学习和参赛中经常遇到的问题:有了调试好的程序,例程运行结果也正常,但换个问题仍然不会使用。

这并不是你的错。程序有漏洞,接口不标准,文档对不上,教程说不清,这就是你所拿到的例程。你的错误,是选择了这样的例程,或者说选择了这样的编程方案。

这也是本系列教程希望解决的问题。就拿线性规划、整数规划来说,算法还不是很复杂,第三方软件包也很丰富。但是,Scipy 只能求解线性规划,不能求解整数规划,如果选择 Scipy 做线性规划,那在学整数规划时就要再学另一种工具包,二者的模型描述、函数定义、参数设置肯定也是不同的。接下来遇到非线性规划问题再学一种软件包,最后别说熟练掌握算法函数,连什么时候该用哪个 工具包都搞晕了。

闲话少说,我们还是用上节求解线性规划问题的 PuLP 工具包。

三、PuLP 求解整数规划问题

我们不仅继续用 PuLP 工具包,而且解题过程和编程步骤也与求解线性规划问题完全一致。

下面我们以一个简单的数学模型练习,来讲解整个解题过程,而不仅给出例程。

3.1、案例问题描述

例题 1:

某厂生产甲乙两种饮料,每百箱甲饮料需用原料 6千克、工人 10名,获利 10万元;每百箱乙饮料需用原料 5千克、工人 20名,获利 9万元。

今工厂共有原料 60千克、工人 150名,又由于其他条件所限甲饮料产量不超过8百箱。

问题 1:问如何安排生产计划,即两种饮料各生产多少使获利最大?

问题 2:若投资0.8万元可增加原料1千克,是否应作这项投资?投资多少合理?

问题 3:若不允许散箱(按整百箱生产),如何安排生产计划,即两种饮料各生产多少使获利最大?

问题 4:若不允许散箱(按整百箱生产),若投资0.8万元可增加原料1千克,是否应作这项投资?投资多少合理?

3.2、建模过程分析

线性规划和整数规划类的问题的建模和求解,通常可以按问题定义、模型构建、模型求解的步骤进行。

3.2.1、问题定义

问题定义, 确定决策变量、目标函数和约束条件。

1.决策变量是问题中可以在一定范围内进行变化而获得不同结果的变量。

对于问题 1,问题描述中说的很明确,希望通过改变甲、乙两种饮料的产量使总利润最大,甲、乙两种饮料的产量就是决策变量。

对于问题 2 则要注意,如果只看前一句,就是比较问题 1 与问题 2 的利润,还是把甲、乙两种饮料的产量作为决策变量。但要回答后一句“投资多少合理”,这就出现了一个新的变量“投资额”,因此对问题 2 要建立 3个决策变量:甲产量、乙产量和投资额。

2.目标函数是决策变量的函数,我们希望通过改变决策变量的值而获得目标函数的最大值或最小值,通常是总成本(最小)、总利润(最大)、总时间(最短)。

对于本案例,每个问题都是希望获得最大利润,目标函数都是总利润,问题是求目标函数即总利润的最大值。

3.约束条件是决策变量所要满足的限制条件。

约束条件 3 种情况:

一是不等式约束,例如题目指出共有原料 60千克、工人 150名,因此生产计划所用的原料、工人的需求不能大于题目中数值。

二是等式约束,本题没有等式约束条件。

三是决策变量取值范围的约束。

通常,题目隐含着决策变量大于等于 0 的条件,例如工人人数、原料数量都要大于等于 0。

另外,如果能通过分析前面的等式约束或不等式约束,得出决策变量的上限,将会极大的提高问题求解的速度和性能。后文将对此举例说明。

3.2.2、模型构建

模型构建, 由问题描述建立数学方程,并转化为标准形式的数学模型。

对于问题 1,目标函数是生产甲、乙两种饮料的总利润,约束条件是原料总量、工人总数的约束,而且原料、工人都要大于等于 0。

进一步分析决策变量取值范围的约束条件,由原料数量、工人数量的不等式约束可以推出:

对于问题 2,可以通过增加投资来获得更多的原料,投资额是一个新的变量。要注意的是,此时目标函数虽然也是生产两种饮料的总利润,但总利润不等于总收入,而是总收入减去总成本,在本例中就是要减去购买原料的投资。

对于问题 3 和问题 4,区别只是不允许散箱,明确提出了决策变量 x1、x2 的取值要取整数值,所以是整数规划问题。
需要注意的是,问题 4 中对增加的投资额即购买的原料数量并没有整数限制,因此 x1、x2 的取值范围是正整数,但 x3 的取值范围是正数,这是一个混合整数规划问题。
还要说明的是,对于问题 1 和问题 2,虽然题目中没有明确要求生产甲、乙饮料的工人人数为整数,但是人数也不可能是小数的,那么这是不是也是整数规划问题呢?
如果你能提出这个问题,那么恭喜你,你已经从小白升级为菜鸟了。
我的理解是,这个问题怎么说都可以。如果要简化问题,使用线性规划模型,最好在问题假设中说一句,假设甲乙饮料在同一车间先后生产,只要允许甲乙饮料散箱生产,即使根据产量所求出的工人数是小数,也可以解释的通。如果你掌握了整数规划问题的求解,那就先按线性规划建模,再补充讨论工人人数也必须是整数的条件,按整数规划建模求解,这就是妥妥的获奖论文了。

3.2.3、模型求解

模型求解,用标准模型的优化算法对模型求解,得到优化结果。

在线性规划问题中已经讲过使用 PuLP 的求解步骤:

(0)导入 PuLP库函数

import pulp

(1)定义一个规划问题

ProbLP1 = pulp.LpProblem("ProbLP1", sense=pulp.LpMaximize)    # 定义问题 1,求最大值

pulp.LpProblem 用来定义问题的构造函数。"ProbLP1"是用户定义的问题名。
参数 sense 指定问题求目标函数的最小值/最大值 。本例求最大值,选择 “pulp.LpMaximize” 。

(2)定义决策变量

对于问题 1:

x1 = pulp.LpVariable('x1', lowBound=0, upBound=15, cat='Continuous')  # 定义 x1
x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2

pulp.LpVariable 用来定义决策变量的函数。'x1'、'x2' 是用户定义的变量名。
参数 lowBound、upBound 用来设定决策变量的下界、上界;可以不定义下界/上界,默认的下界/上界是负无穷/正无穷。本例中 x1、x2 的取值区间分别为 [0,15]、[0,7.5]。
参数 cat 用来设定变量类型,可选参数值:'Continuous' 表示连续变量(默认值)、' Integer ' 表示离散变量(用于整数规划问题)、' Binary ' 表示0/1变量(用于0/1规划问题)。

对于问题 3, 甲乙饮料产量 x1、x2 必须取整数,是整数规划问题,因此要设置变量类型为离散变量(整数变量):

x1 = pulp.LpVariable('x1', lowBound=0, upBound=15, cat='Integer')  # 定义 x1,变量类型:整数
x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Integer')  # 定义 x2,变量类型:整数

(3)添加目标函数

ProbLP1 += (10*x1 + 9*x2)  # 设置目标函数 f(x)

添加目标函数使用 "问题名 += 目标函数式" 格式。

(4)添加约束条件

ProbLP1 += (6*x1 + 5*x2 <= 60)  # 不等式约束
ProbLP1 += (10*x1 + 20*x2 <= 150)  # 不等式约束

添加约束条件使用 "问题名 += 约束条件表达式" 格式。
约束条件可以是等式约束或不等式约束,不等式约束可以是 小于等于 或 大于等于,分别使用关键字">="、"<="和"=="。

(5)求解

ProbLP1.solve()
print(ProbLP1.name)  # 输出求解状态
print("Status:", pulp.LpStatus[ProbLP1.status])  # 输出求解状态
for v in ProbLP1.variables():
    print(v.name, "=", v.varValue)  # 输出每个变量的最优值
print("F1(x) =", pulp.value(ProbLP1.objective))  # 输出最优解的目标函数值

solve() 是求解函数,可以对求解器、求解精度进行设置。
PuLP默认采用 CBC 求解器来求解优化问题,也可以调用其它的优化器来求解,但需要另外安装。 

3.3、Python 例程

import pulp      # 导入 pulp 库

# 主程序
def main():

    # 模型参数设置
    """
    问题描述:
        某厂生产甲乙两种饮料,每百箱甲饮料需用原料6千克、工人10名,获利10万元;每百箱乙饮料需用原料5千克、工人20名,获利9万元。
        今工厂共有原料60千克、工人150名,又由于其他条件所限甲饮料产量不超过8百箱。
        (1)问如何安排生产计划,即两种饮料各生产多少使获利最大?
        (2)若投资0.8万元可增加原料1千克,是否应作这项投资?投资多少合理?
        (3)若不允许散箱(按整百箱生产),如何安排生产计划,即两种饮料各生产多少使获利最大?
        (4)若不允许散箱(按整百箱生产),若投资0.8万元可增加原料1千克,是否应作这项投资?投资多少合理?
    """

    # 问题 1:
    """
    问题建模:
        决策变量:
            x1:甲饮料产量(单位:百箱)
            x2:乙饮料产量(单位:百箱)
        目标函数:
            max fx = 10*x1 + 9*x2
        约束条件:
            6*x1 + 5*x2 <= 60
            10*x1 + 20*x2 <= 150
            x1, x2 >= 0,x1 <= 8
    此外,由 x1,x2>=0 和 10*x1+20*x2<=150 可知 0<=x2<=7.5
    """
    ProbLP1 = pulp.LpProblem("ProbLP1", sense=pulp.LpMaximize)    # 定义问题 1,求最大值
    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2
    ProbLP1 += (10*x1 + 9*x2)  # 设置目标函数 f(x)
    ProbLP1 += (6*x1 + 5*x2 <= 60)  # 不等式约束
    ProbLP1 += (10*x1 + 20*x2 <= 150)  # 不等式约束
    ProbLP1.solve()
    print(ProbLP1.name)  # 输出求解状态
    print("Status youcans:", pulp.LpStatus[ProbLP1.status])  # 输出求解状态
    for v in ProbLP1.variables():
        print(v.name, "=", v.varValue)  # 输出每个变量的最优值
    print("F1(x) =", pulp.value(ProbLP1.objective))  # 输出最优解的目标函数值

    # 问题 2:
    """
    问题建模:
        决策变量:
            x1:甲饮料产量(单位:百箱)
            x2:乙饮料产量(单位:百箱)
            x3:增加投资(单位:万元)
        目标函数:
            max fx = 10*x1 + 9*x2 - x3
        约束条件:
            6*x1 + 5*x2 <= 60 + x3/0.8
            10*x1 + 20*x2 <= 150
            x1, x2, x3 >= 0,x1 <= 8
    此外,由 x1,x2>=0 和 10*x1+20*x2<=150 可知 0<=x2<=7.5
    """
    ProbLP2 = pulp.LpProblem("ProbLP2", sense=pulp.LpMaximize)    # 定义问题 2,求最大值
    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2
    x3 = pulp.LpVariable('x3', lowBound=0, cat='Continuous')  # 定义 x3
    ProbLP2 += (10*x1 + 9*x2 - x3)  # 设置目标函数 f(x)
    ProbLP2 += (6*x1 + 5*x2 - 1.25*x3 <= 60)  # 不等式约束
    ProbLP2 += (10*x1 + 20*x2 <= 150)  # 不等式约束
    ProbLP2.solve()
    print(ProbLP2.name)  # 输出求解状态
    print("Status  youcans:", pulp.LpStatus[ProbLP2.status])  # 输出求解状态
    for v in ProbLP2.variables():
        print(v.name, "=", v.varValue)  # 输出每个变量的最优值
    print("F2(x) =", pulp.value(ProbLP2.objective))  # 输出最优解的目标函数值

    # 问题 3:整数规划问题
    """
    问题建模:
        决策变量:
            x1:甲饮料产量,正整数(单位:百箱)
            x2:乙饮料产量,正整数(单位:百箱)
        目标函数:
            max fx = 10*x1 + 9*x2
        约束条件:
            6*x1 + 5*x2 <= 60
            10*x1 + 20*x2 <= 150
            x1, x2 >= 0,x1 <= 8,x1, x2 为整数
    此外,由 x1,x2>=0 和 10*x1+20*x2<=150 可知 0<=x2<=7.5
    """
    ProbLP3 = pulp.LpProblem("ProbLP3", sense=pulp.LpMaximize)  # 定义问题 3,求最大值
    print(ProbLP3.name)  # 输出求解状态
    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Integer')  # 定义 x1,变量类型:整数
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Integer')  # 定义 x2,变量类型:整数
    ProbLP3 += (10 * x1 + 9 * x2)  # 设置目标函数 f(x)
    ProbLP3 += (6 * x1 + 5 * x2 <= 60)  # 不等式约束
    ProbLP3 += (10 * x1 + 20 * x2 <= 150)  # 不等式约束
    ProbLP3.solve()
    print("Shan Status:", pulp.LpStatus[ProbLP3.status])  # 输出求解状态
    for v in ProbLP3.variables():
        print(v.name, "=", v.varValue)  # 输出每个变量的最优值
    print("F3(x) =", pulp.value(ProbLP3.objective))  # 输出最优解的目标函数值

    # 问题 4:
    """
    问题建模:
        决策变量:
            x1:甲饮料产量,正整数(单位:百箱)
            x2:乙饮料产量,正整数(单位:百箱)
            x3:增加投资(单位:万元)
        目标函数:
            max fx = 10*x1 + 9*x2 - x3
        约束条件:
            6*x1 + 5*x2 <= 60 + x3/0.8
            10*x1 + 20*x2 <= 150
            x1, x2, x3 >= 0,x1 <= 8,x1, x2 为整数
    此外,由 x1,x2>=0 和 10*x1+20*x2<=150 可知 0<=x2<=7.5
    """
    ProbLP4 = pulp.LpProblem("ProbLP4", sense=pulp.LpMaximize)  # 定义问题 4,求最大值
    print(ProbLP4.name)  # 输出求解状态
    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Integer')  # 定义 x1,变量类型:整数
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7, cat='Integer')  # 定义 x2,变量类型:整数
    x3 = pulp.LpVariable('x3', lowBound=0, cat='Continuous')  # 定义 x3
    ProbLP4 += (10*x1 + 9*x2 - x3)  # 设置目标函数 f(x)
    ProbLP4 += (6*x1 + 5*x2 - 1.25*x3 <= 60)  # 不等式约束
    ProbLP4 += (10*x1 + 20*x2 <= 150)  # 不等式约束
    ProbLP4.solve()
    print("Shan Status:", pulp.LpStatus[ProbLP4.status])  # 输出求解状态
    for v in ProbLP4.variables():
        print(v.name, "=", v.varValue)  # 输出每个变量的最优值
    print("F4(x) =", pulp.value(ProbLP4.objective))  # 输出最优解的目标函数值

    return

if __name__ == '__main__':  # Copyright 2021 YouCans, XUPT
    main()  

3.4、Python 例程运行结果

Welcome to the CBC MILP Solver 

Version: 2.9.0 

Build Date: Feb 12 2015 

ProbLP1

Status: Optimal

x1 = 6.4285714

x2 = 4.2857143

F1(x) = 102.8571427

ProbLP2

Status: Optimal

x1 = 8.0

x2 = 3.5

x3 = 4.4

F2(x) = 107.1

ProbLP3

Result - Optimal solution found

Status Shan: Optimal

Status: Optimal

x1 = 8.0

x2 = 2.0

F3(x) = 98.0

ProbLP4

Result - Optimal solution found

Status: Optimal

x1 = 8.0

x2 = 3.0

x3 = 2.4

F4(x) = 104.6

以上就是浅谈Python数学建模之整数规划的详细内容,更多关于Python 数学建模 整数规划的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python进行统计建模

    前言 大家好,在之前的文章中我们已经讲解了很多Python数据处理的方法比如读取数据.缺失值处理.数据降维等,也介绍了一些数据可视化的方法如Matplotlib.pyecharts等,那么在掌握了这些基础技能之后,要进行更深入的分析就需要掌握一些常用的建模方法,本文将讲解如何利用Python进行统计分析.和之前的文章类似,本文只讲如何用代码实现,不做理论推导与过多的结果解释(事实上常用的模型可以很轻松的查到完美的推导与解析).因此读者需要掌握一些基本的统计模型比如回归模型.时间序列等. Stat

  • python实现数据分析与建模

    前言 首先我们做数据分析,想要得出最科学,最真实的结论,必须要有好的数据.而实际上我们一般面对的的都是复杂,多变的数据,所以必须要有强大的数据处理能力,接下来,我从我们面临的最真实的情况,一步一步教会大家怎么做. 1.数据的读取 (1)读取模块 Import pandas as pd Import numpy as np (2)读取表格的全部数据 df = pd.read_csv(".data/HR.csv") (3)读取你所需要的数据 sl_s=df["sactisfact

  • Python内建模块struct实例详解

    本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Python本来就是高级解释性语言,运行的时候都是经过翻译后再在底层运行.如何打通Python和其他语言之间的类型定义障碍,Python的内建模块struct完全解决了所有问题. 知识介绍: 在struct模块中最最常用的三个: (1)struct.pack:用于将Python的值根据格式符,转换为字符串(因

  • 浅谈Python数学建模之数据导入

    目录 一.数据导入是所有数模编程的第一步 二.在程序中直接向变量赋值 2.1.为什么直接赋值? 2.2.直接赋值的问题与注意事项 三.Pandas 导入数据 3.1.Pandas 读取 Excel 文件 3.2.Pandas 读取 csv 文件 3.3.Pandas 读取文本文件 3.4.Pandas 读取其它文件格式 四.数据导入例程 一.数据导入是所有数模编程的第一步 编程求解一个数模问题,问题总会涉及一些数据. 有些数据是在题目的文字描述中给出的,有些数据是通过题目的附件文件下载或指定网址

  • Python创建模块及模块导入的方法

    本文实例讲述了Python创建模块及模块导入的方法.分享给大家供大家参考.具体分析如下: python学习手册中写道: 定义模块,只要使用文本编辑器,把一些python代码输入到文本中,然后以.py为后缀名进行保存,任何此类文件都会被认为是python模块. 比如说,下面的代码输入到一个文件中,就可以看作是一个模块: def printme(var): print var if __name__ == '__main__': printme(1) 假设说输入到a.py中,那么import a就可

  • 浅谈Python数学建模之线性规划

    目录 一.求解方法.算法和编程方案 1.1.线性规划问题的求解方法 1.2.线性规划的最快算法 1.3.选择适合自己的编程方案 二.PuLP库求解线性规划问题 2.1.线性规划问题的描述 2.2.PuLP 求解线性规划问题的步骤 2.3.Python例程:线性规划问题 三.小结 一.求解方法.算法和编程方案 线性规划 (Linear Programming,LP) 是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 线性规划问题是中学数学的内容,鸡兔同笼就是一个线性规划问题.数学规划的题目在

  • 利用python实现平稳时间序列的建模方式

    一.平稳序列建模步骤 假如某个观察值序列通过序列预处理可以判定为平稳非白噪声序列,就可以利用ARMA模型对该序列进行建模.建模的基本步骤如下: (1)求出该观察值序列的样本自相关系数(ACF)和样本偏自相关系数(PACF)的值. (2)根据样本自相关系数和偏自相关系数的性质,选择适当的ARMA(p,q)模型进行拟合. (3)估计模型中位置参数的值. (4)检验模型的有效性.如果模型不通过检验,转向步骤(2),重新选择模型再拟合. (5)模型优化.如果拟合模型通过检验,仍然转向不走(2),充分考虑

  • Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例

    本文实例讲述了Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据.分享给大家供大家参考,具体如下: 一.Logistic回归模型: 二.Logistic回归建模步骤 1.根据分析目的设置指标变量(因变量和自变量),根据收集到的数据进行筛选 2.用ln(p/1-p)和自变量x1...xp列出线性回归方程,估计出模型中的回归系数 3.进行模型检验.模型有效性检验的函数有很多,比如正确率.混淆矩阵.ROC曲线.KS值 4.模型应用. 三.对某银行在降低贷款拖欠率的数据进行建模 源

  • 浅谈Python数学建模之整数规划

    目录 一.从线性规划到整数规划 1.1.为什么会有整数规划? 1.2.四舍五入就能得到整数解吗? 二.整数规划的求解方法 2.1.分支定界法(Branch and bound) 2.2.割平面法(Cutting plane) 2.3.整数规划的编程方案 三.PuLP 求解整数规划问题 3.1.案例问题描述 3.2.建模过程分析 3.2.1.问题定义 3.2.2.模型构建 3.2.3.模型求解 3.3.Python 例程 3.4.Python 例程运行结果 一.从线性规划到整数规划 1.1.为什么

  • 浅谈Python数学建模之固定费用问题

    目录 一.固定费用问题案例解析 1.1.固定费用问题(Fixed cost problem) 1.2.案例问题描述 1.3.建模过程分析 1.4.PuLP 求解固定费用问题的编程 1.5.Python 例程:固定费用问题 1.6.Python 例程运行结果 二.PuLP 求解规划问题的快捷方法 2.1.PuLP 求解固定费用问题的编程 2.2.Python 例程:PuLP 快捷方法 2.3.Python 例程运行结果 一.固定费用问题案例解析 1.1.固定费用问题(Fixed cost prob

  • Python数学建模学习模拟退火算法整数规划问题示例解析

    目录 1.整数规划问题 2.模拟退火算法处理整数约束 3.数模案例 3.1 问题描述: 3.2 问题分析: 3.3 问题建模: 3.4 惩罚函数法求解约束优化问题: 4.模拟退火算法 Python 程序:求解整数规划问题 5.运行结果 参考文献: 1.整数规划问题 线性规划问题的最优解可能是分数或小数.但很多实际问题常常要求某些变量必须是整数解,例如:机器的台数.工作的人数或装货的车数.根据对决策变量的不同要求,整数规划又可以分为:纯整数规划.混合整数规划.0-1整数规划.混合0-1规划. 整数

  • 浅谈Python数据类型之间的转换

    Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 complex(real [,imag]) 创建一个复数 str(x) 将对象 x 转换为字符串 repr(x) 将对象 x 转换为表达式字符串 eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s) 将序列 s 转换为一个元组 list(s) 将序列 s 转换为一个

  • 浅谈python中的数字类型与处理工具

    python中的数字类型工具 python中为更高级的工作提供很多高级数字编程支持和对象,其中数字类型的完整工具包括: 1.整数与浮点型, 2.复数, 3.固定精度十进制数, 4.有理分数, 5.集合, 6.布尔类型 7.无穷的整数精度 8.各种数字内置函数及模块. 基本数字类型 python中提供了两种基本类型:整数(正整数金额负整数)和浮点数(注:带有小数部分的数字),其中python中我们可以使用多种进制的整数.并且整数可以用有无穷精度. 整数的表现形式以十进制数字字符串写法出现,浮点数带

  • 浅谈python数据类型及其操作

    一. Number 数字 1.内置函数:需要导入math 2.随机数函数:需要导入random 模块 3.三角函数:需要导入math模块 4.数学常量:需要导入math模块 #1.数据函数的使用 #========================== #内置函数 print(abs(-10)) #10绝对值 print(round(4.56789,2)) #4.57 使用四舍五入的方式保留小数点后两位 a = [10,30,20,80,50] print(max(a)) #80 最大值 prin

  • 初学python数学建模之数据导入(小白篇)

    目录 1. 数据导入是所有数模编程的第一步 2. 在程序中直接向变量赋值 2.1 为什么直接赋值? 2.2 直接赋值的问题与注意事项 例程 1:将数据导入作为单独的函数 例程 2:将数据导入集中写成一段,放在程序的起始部分 3. Pandas 导入数据 3.1 Pandas 读取 Excel 文件 pd.read_excel() 的主要参数: pd.read_excel() 使用实例: 3.2 Pandas 读取 csv 文件 Pandas 使用 pandas.read_csv() 函数读取 E

  • Python数学建模学习模拟退火算法约束条件处理示例解析

    目录 1.最优化与线性规划 2.模拟退火算法处理约束条件 3.惩罚函数法 4.数模案例 4.1 问题描述: 4.2 问题建模: 5.模拟退火算法 Python 程序 6.运行结果 参考文献: 1.最优化与线性规划 最优化问题的三要素是决策变量.目标函数和约束条件. 线性规划(Linear programming),是研究线性约束条件下线性目标函数的极值问题的优化方法,常用于解决利用现有的资源得到最优决策的问题. 简单的线性规划问题可以用 Lingo软件求解,Matlab.Python 中也有求解

随机推荐