【高级】管理科学基础知识

动态规划

动态规划是决策分析中的一种常用方法,是解决多阶段决策过程问题的一种最优化方法。所谓多阶段决策过程,就是将问题分成若干个相互联系的阶段,每个阶段都作出决策,从而使整个过程最优化。动态规划的实质是分治思想解决冗余

  • 重叠子问题
  • 最优子结构
  • 状态转移方程

最小生成树

普里姆算法

普里姆(Prim)算法是一某个顶点为起点,逐步找各顶点最小权值的边来构建最小生成树。换一种说法:从任意一顶点 v0 开始选择其最近顶点 v1 构成树 T1,再连接与 T1 最近顶点 v2 构成树 T2, 如此重复直到所有顶点均在所构成树中为止。

克鲁斯卡尔

克鲁斯卡尔算法将连通网中所有的边按照权值大小做升序排序,从权值最小的边开始选择,只要此“边”不和已选择的边一起构成环路,就可以选择它组成最小生成树。对于 N 个顶点的连通网,挑选出 N-1 条符合条件的边,这些边组成的生成树就是最小生成树。

最短路径

迪杰斯特拉 1->N

迪杰斯特拉算法用于查找图中某个顶点到其它所有顶点的最短路径,该算法既适用于无向加权图,也适用于有向加权图。注意,使用迪杰斯特拉算法查找最短路径时,必须保证图中所有边的权值为非负数。

思路:

1. 找出当前最短路径顶点。

2. 从当前最短路径顶点出发,刷新各个顶点的最短路径。

    // 迪杰斯特拉算法,v0表示有向网中起始点所在数组中的下标
    public static void Dijkstra_minTree(MGraph G, int v0, int[] p, int[] D) {
        int[] tab = new int[V]; // 为各个顶点配置一个标记值,用于确认该顶点是否已经找到最短路径
        // 对各数组进行初始化
        for (int v = 0; v < G.vexnum; v++) {
            tab[v] = 0;
            D[v] = G.arcs[v0][v];
            p[v] = 0;
        }
        // 由于以v0位下标的顶点为起始点,所以不用再判断
        D[v0] = 0;
        tab[v0] = 1;
        int k = 0;
        for (int i = 0; i < G.vexnum; i++) {
            int min = 65535;
            // 选择到各顶点权值最小的顶点,即为本次能确定最短路径的顶点
            for (int w = 0; w < G.vexnum; w++) {
                if (tab[w] != 1) {
                    if (D[w] < min) {
                        k = w;
                        min = D[w];
                    }
                }
            }
            // 设置该顶点的标志位为1,避免下次重复判断
            tab[k] = 1;
            // 对v0到各顶点的权值进行更新
            for (int w = 0; w < G.vexnum; w++) {
                if (tab[w] != 1 && (min + G.arcs[k][w] < D[w])) {
                    D[w] = min + G.arcs[k][w];
                    p[w] = k;// 记录各个最短路径上存在的顶点
                }
            }
        }
    }

弗洛伊德  N->N

在一个加权图中,如果想找到各个顶点之间的最短路径,可以考虑使用弗洛伊德算法。弗洛伊德算法既适用于无向加权图,也适用于有向加权图。使用弗洛伊德算法查找最短路径时,只允许环路的权值为负数,其它路径的权值必须为非负数。

思路: 遍历每个顶点,将其作为其它顶点之间的中间顶点,更新 graph 数组

    // 实现弗洛伊德算法,graph[][V] 为有向加权图
    public static void floydWarshall(int[][] graph) {
        int i, j, k;
        // 遍历每个顶点,将其作为其它顶点之间的中间顶点,更新 graph 数组
        for (k = 0; k < V; k++) {
            for (i = 0; i < V; i++) {
                for (j = 0; j < V; j++) {
                    // 如果新的路径比之前记录的更短,则更新 graph 数组
                    if (graph[i][k] + graph[k][j] < graph[i][j]) {
                        graph[i][j] = graph[i][k] + graph[k][j];
                        // 记录此路径
                        P[i][j] = k;
                    }
                }
            }
        }
        // 输出各个顶点之间的最短路径
        printMatrix(graph);
    }

网络与最大流量

一个流量网络,是一张边的权重(这里称为容量)为正的加权有向图。一个st-流量网络有两个已知的顶点,即起点s和终点t。

    public FordFulkerson(FlowNetwork G, int s, int t)
	{	//找出从s到t的流量网络G的最大流量配置
		while(hasAugmentingPath(G, s, t))
		{	//利用所有存在的增广路径
			//计算当前的瓶颈容量
			double bottle = Double.POSITIVE_INFINITY;
			for(int v = t; v != s; v = edgeTo[v].other(v))
			{
				bottle = Math.min(bottle, edgeTo[v].residualCapacityTo(v));
			}
			//增大流量
			for(int v = t; v != s; v = edgeTo[v].other(v))
			{
				edgeTo[v].addResidualFlowTo(v, bottle);
			}
			value += bottle;
		}		
	}

决策论

不确定型决策

乐观主义准则

(冒险法)在决策中的体运用是:首先,确定每一可选方案的最大利润值;然后,在这些方案的最大利润中选出一个最大值,与该最大值相对应的那个可选方案便是决策选择的方案。

悲观主义准则

(保守法)进行决策时,首先要确定每一可选方案的最小收益值,然后从这些方案最小收益值中,选出一个最大值,与该最大值相对应的方案就是决策所选择的方案。

折中主义准则

也称折衰决策法,决策者确定一个乐观系数ε(0.5,1),运用乐观系数计算出各方案的乐观期望值,并选择期望值最大的方案。

等可能准则

拉普拉斯决策准则。采用这种方法,是假定自然状态中任何一种发生的可能性是相同的,通过比较每个方案的损益平均值来进行方案的选择,在利润最大化目标下,选取择平均利润最大的方案,在成本最小化目标下选择平均成本最小的方案。

后悔值准则

运用最小最大后悔值法时,首先要将决策矩阵从利润矩阵转变为机会损失矩阵;然后确定每一可选方案的最大机会损失;再次,在这些方案的最大机会损失中,选出一个最小值,与该最小值对应的可选方案便是决策选择的方案。

灵敏度分析

偏导分析敏感度分析

灵敏度分析_百度百科

线性分析

图解法

坐标图上求解,点或者边

单纯形法

单纯形法的一般解题步骤可归纳如下:

(1)把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作为初始基本可行解 。

(2)若基本可行解不存在,即约束条件有矛盾,则问题无解  

(3)若基本可行解存在,以初始基本可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解  。

(4)按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。

(5)若迭代过程中发现问题的目标函数值无界,则终止迭代 

参考地址: 算法是什么

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值