09-1 0-1规划的隐枚举法

09-1 0-1规划的隐枚举法
09-1 0-1规划的隐枚举法

2013-2014(2)专业课程实践论文题目:0-1规划的隐枚举法

一、算法理论

0—1规划在整数规划中占有重要地位,一方面因为许多实际问题,例如指派问题、选地问题、送货问题都可归结为此类规划,另一方面任何有界变量的整数规划都与0—1规划等价,用0—1规划方法还可以把多种非线性规划问题表示成整数规划问题,所以不少人致力于这个方向的研究。求解0—1规划的常用方法是分枝定界法,对各种特殊问题还有一些特殊方法。

线性模型中,当变量的取值只能是“0”或“1”时,称之为“0-1规划问题”。有种极其简单的解法,就是将变量取值为0或1的所有组合列出,然后分别代入目标函数,选出其中能使目标函数最优化的组合,即为最优解。但是真的这样会做很多无用功,浪费大量资源,所以,需要改进方法。本文主要介绍隐枚举法的应用原理,意在剖析其“隐”在何处。从而帮助读者更好地应用这种方法。

和线性规划问题一样,首先需要将模型标准化。标准化对0-1规划问题提出四点要求:

1.目标函数为最小优化

2.目标函数中变量的系数都为正

3.在目标函数中,变量按系数值从小到大排列,则约束函数中,变量的排列次序也做相应改变。

4.所有变量均为0或1

0-1线性规划的基本形式是

二、算法框图

三、算法程序function [intx,intf] = ZeroOneprog(c,A,b,x0)

%目标函数系数向量,c

%不等式约束矩阵,A

%不等式约束右端向量,b

%初始整数可行解,x0

%目标函数取最小值时的自变量值,intx

%目标函数的最小值,intf

sz = size(A);

if sz(2) < 3

[intx,intf] = Allprog(c,A,b); %穷举法

else

[intx,intf] = Implicitprog(c,A,b,x0); %隐枚举法end

function [intx,intf] = Allprog(c,A,b)

sz_A = size(A);

rw = sz_A(1);

col = sz_A(2);

minf = inf;

for i=0:(2^(col)-1) %枚举空间

x1 = myDec2Bin(i,col); %十进制转化为二进制

if A*x1 >= b %是否满足约束条件

f_tmp = c*x1;

if f_tmp < minf

minf = f_tmp;

intx = x1;

intf = minf;

else

continue;

end

else

continue;

end

end

function [intx,intf] = Implicitprog(c,A,b,x0)%隐枚举法sz_A = size(A);

rw = sz_A(1);

col = sz_A(2);

minf = c*x0;

A = [A;-c];

b = [b;-minf]; %增加了一个限制分量

for i=0:(2^(col)-1)

x1 = myDec2Bin(i,col);

if A*x1 >= b

f_tmp = c*x1;

if f_tmp < minf

minf = f_tmp;

b(rw+1,1) = -minf; %隐枚举法与穷举法的区别在于此句 intx = x1;

intf = minf;

else

continue;

end

else

continue;

end

end

function y = myDec2Bin(x,n) %十进制转化为二进制

str = dec2bin(x,n);

for j=1:n

y(j) = str2num(str(j));

end

y = transpose(y);

四、算法实现

例1.求解下面0-1规划

小学数学《常规应用题的解法——枚举法》练习题(含答案)

小学数学《常规应用题的解法——枚举法》练习题(含答案) 知识要点 我们在课堂上遇到的数学问题,有一些需要计算总数或种类的趣题,因其数量关系比较隐蔽,很难利用计算的方法解决。我们可以抓住对象的特征,按照一定的顺序,选择恰当的标准,把问题分为不重复、不遗漏的有限种情形,通过一一列举或计数,最终达到解决目的。这就是枚举法,也叫做列举法或穷举法。 解题指导1 1.枚举法在数字组合中的应用。 按照一定的组合规律,把所有组合的数一一列举出来。 【例1】用数字1,2,3组成不同的三位数,分别是哪几个数? 【思路点拨】根据百位上的数字的不同分为3类。 第一类:百位上为1的有:123 132 第二类:百位上为2的有:213 231 第三类:百位上为3的有:312 321 答:可以组成123,132,213 ,231,312 ,321六个数。 【变式题1】用0、6、7、8、9这五个数字组成各个数位上数字不相同的两位数共有多少个? 解题指导2 2.骰子中的点数 掷骰子是生活中常见的游戏玩法,既可以掷一个骰子,比较掷出的点数大小,也可以掷两个骰子,把两个骰子的点数相加,再比较点数的大小。一个骰子只有6个点数,而两个骰子的点数经过组合最小是2,最大是12。在解决有关掷两个骰子的问题时,要全面考虑所有出现的点数情况。 【例2】小明和小红玩掷骰子的游戏,共有两枚骰子,一起掷出。若两枚骰子的点数和为7,则小明胜;若点数和为8,则小红胜。试判断他们两人谁获胜的可能性大。 【思路点拨】将两枚骰子的点数和分别为7与8的各种情况都列举出来,就可得到问题的结论。用a+b表示第一枚骰子的点数为a,第二枚骰子的点数是b的情况。 出现7的情况共有6种,它们是: 1+6,2+5,3+4,4+3,5+2,6+1。 出现8的情况共有5种,它们是: 2+6,3+5,4+4,5+3,6+2。 所以,小明获胜的可能性大。 注意,本题中若认为出现7的情况有1+6,2+5,3+4三种,出现8的情况有2+6,3+5,4+4也是三种,从而得“两人获胜的可能性一样大”,那就错了。 答:小明获胜的可能性大。 【变式题2】用一台天平和重1克、3克、9克的砝码各一个(不再用其他物体当砝码),当

运筹学与最优化方法习题集

一.单纯性法 1.用单纯形法求解下列线性规划问题(共 15 分) 12 2121212max 2515 6224..5 ,0 z x x x x x s t x x x x =+≤??+≤??+≤??≥? 2.用单纯形法求解下列线性规划问题(共 15 分) 12 121212max 2322 ..2210 ,0 z x x x x s t x x x x =+-≥-??+≤??≥? 3.用单纯形法求解下列线性规划问题(共 15 分) 1234 123412341234max 24564282 ..2341 ,,,z x x x x x x x x s t x x x x x x x x =-+-+-+≤? ?-+++≤??≥ ? 4.用单纯形法求解下列线性规划问题(共 15 分) 123 123123123123max 2360 210..20 ,,0 z x x x x x x x x x s t x x x x x x =-+++≤??-+≤??+-≤??≥? 5.用单纯形法求解下列线性规划问题(共 15 分) 123 12312123max 224 ..26,,0 z x x x x x x s t x x x x x =-++++≤??+≤??≥? 6.用单纯形法求解下列线性规划问题(共 15 分)

12 121212 max 105349..528 ,0z x x x x s t x x x x =++≤??+≤??≥? 7.用单纯形法求解下列线性规划问题(共 16 分) 12 121212max 254 212..3218 ,0 z x x x x s t x x x x =+≤??≤??+≤??≥?

线性整数规划习题(隐枚举法)

三、线形整数规划习题(隐枚举法) 某长输管道泵站配有6台输油泵,串联使用。现要求泵站工作点为Q=2000m 3 /h,H=550m.当输量Q=2000m 3 /h 时,各台泵的扬程及相应的电耗见下表: 试确定一个最优泵组合方案,使所耗的总功率最小。 解 :该问题的数学模型如下: 6543211150110010201000530365min x x x x x x s +++++= ? ??-==≥+++++611,0550 2002001801809060..654321j x x x x x x x t s j 按约束条件的系数由达到小的顺序将相应的变量排列起来: 6543213655301000102011001150min x x x x x x s +++++= ? ??-==≥+++++611,0550 60901801802000200..123456j x x x x x x x t s j 用隐枚举法求解,步骤如下: 1. NFREE={+6},FREE={5,4,3,2,1},X=(0,0,0,0,0,1)T ,S=1150,R(X)=200<550, X 不可行。令S =+∞ 2. NFREE={+6,+5},FREE={4,3,2,1},X=(0,0,0,0,1,1)T ,S=2250,R(X)=400<550, X 不可行。 3. NFREE={+6,+5,+4},FREE={3,2,1},X=(0,0,0,1,1,1)T ,S=3270,R(X)=580>550, X 可行。因S

小学三年级奥数 第七讲 枚举法

第七讲枚举法(一) 学习内容:用枚举法一一列举可能的情况 学习目标:1、做到不重补漏,把复杂的问题简单化 2、按照一定的规律,特点去枚举 3、从思想上认识到枚举的重要性 课题引入 枚举法是一种常见的分析问题、解决问题的方法。一般地,根据问题要求,一一枚举问题的解答,或者为了解决问题的方便,把问题分为不重复、不遗漏的有限种情况,一一枚举各种情况,并加以解决,最终达到解决整个问题的目的。这种分析问题、解决问题的方法,称之为枚举法。枚举法是一种常见的数学方法,当然枚举法也存在一些问题,那就是容易遗漏掉一些情况,所以应用枚举法的时候选择什么样的标准尤其重要。 运用枚举法解题的关键是要正确分类,要注意一下两点:一是分类要全,不能造成遗漏;二是枚举要清,要将每一个符合条件的对象都列举出来。 知识点拨 在数学问题中,有些需要计算总数或种类的趣题,因其数量关系比较隐蔽,很难找到“正统”的方式解答,让人感到无从下手。对此,我们可以先初步估计其数目的大小。若数目不是太大,就按照一定的顺序,一一列举问题的可能情况;若数目过大,并且问题繁杂,我们就抓住对象的特征,选择恰当的标准,把问题分为不重复、不遗漏的有限种情形,通过一一列举或计数,最终达到解决目的。

这就是枚举法,也叫做列举法或穷举法。 例题精讲 例1、用数字1、3、4可以组成多少个不同的三位数 例2、用0,2,5,9可以组成多少个能被5整除的三位数 例3、从1数到100,一共数了多少个3 例4、有8张卡片,上面分别写着自然数1至8。从中取出3张,要使这3张卡片上的数字之和为9。问有多少种不同的取法 例5、现在1分、2分和5分的硬币各4枚,用其中的一些硬币支付2角3分钱,一共有多少种不同的支付方法

最优化

1、系统分析法: 1〉系统:由相互联系的若干部分构成的具有一定功能的整体。 系统的基本特征:①系统由若干部分组成,每一部分具有其特定的功能; ②系统中的各个要素之间相互制约、联系和作用; ③系统是具有一定功能的整体,系统的总功能不等于各个部分功能的简单迭加,系统的整体功能>各部分的功能之和;④系统存在于一定的环境(environment)之中,系统与环境之间存在相互作用,系统与环境的划分是相对的,对于一个系统来说是环境,而对于另一个系统而言可能是其中的一部分。 系统分析法包括以下内容: ① 确定所研究系统的范围及其所处的环境 ② 确定系统的组成部分、结构、功能、目的、各部分的功能和内部规律③ 明确系统各个部分之间的联系,及整个系统与环境之间的联系。④ 在上述分析的基础上,确定问题的决策变量及评价方案优劣的指标(即目标函数)。决策变量就是决定方案优劣的变量。 2〉数学模型:用字母、数字、各种符号、图象、逻辑框图描述实际系统的特征和内在联系的模型称为数学模型。 数学模型由四个要素组成: ①常数(constant):在所研究的问题中保持相对固定或变化不大的量。 ②参数(parameter):由具体系统的内、外部条件确定的量。③变量(variable):指在模型中待确定的量,在最优化中叫决策变量。④ 函数关系(functional relationship):描述模型中常数、参数和变量之间相互关系的方程式或不等式。在最优化问题的数学模型中,最优准则(目标函数)和约束条件都是用函数关系描述的。 2、最优化问题的分类 1〉按最优化问题的最优解是一组数还是函数分为静态和动态最优化问题。 静态最优化问题:最优解为空间一个点。 动态最优化问题:最优解为一曲线或函数(约束条件包含微分方程)。动态最优化问题求解时,常把问题分解成若干个相互关联的连续阶段或若干个子系统处理。 2〉按最优准则的数目分为单目标和多目标最优化问题。 3〉根据问题本身提供信息的准确程度分为确定性和非确定性最优化(随机性)问题。 4〉从工程应用的角度又可分为最优设计和最优运行问题。 5〉根据有无约束可分为有约束和无约束最优化问题。 6〉按照决策变量是连续的还是离散的,最优化问题可分为连续型和离散型最优化问题。 7〉按照约束条件和目标函数是线性的还是非线性的分为线性最优化问题和非线性最优化问题。 8〉按决策过程的结构分为单阶段和多阶段决策问题: 9〉网络优化问题: 3、油气储运中的最优化问题类型 ①成品油最优调和方案的制定(线性规划) ②商品油库的最优进货计划的制定 ③商品油库最优规划与最优布局问题 ④长输管道的最优设计 ⑤长输管道的优化运行 ⑥输油管道最佳月输油计划确定 ⑦矿场油气集输系统的最优化问题 ⑧全国油气产品的合理分配与运输 4、线性规划 线性规划问题是一类特殊的数学规划问题,其目标函数是决策变量的线性函数,约束条件是关于决策变量的线性等式或不等式。线性规划问题的一般形式为: ∑==n j j j x c S 1 max (min) 简写为: ?????=≥=≥∑=n j x m i b x a t s j i j ij ~1 0~1 ..n 1 j 标准形式: ∑==n j j j x c S 1 max

解 0—1 规划的隐枚举法

(5)解 0—1 规划的隐枚举法 解 0—1 规划的隐枚举法有其独特的工作程序,具体过程如下。 a.模型转化为求极小的问题 b.变量替换。极小问题模型的目标函数中所有变量系数为负的0—1变量,可利用变量替换x k=1-x'k (x'k是引入的新的0—1变量),将目标函数中所有变量系数化为正数。 c.目标函数中变量按系数大小排列,约束条件中变量排列顺序也相应调整。 d.按目标函数值由小到大的顺序依次排列可能的解,并予以可行性检验。 e.发现求极小问题的最优解并停止。 f.转化为原问题的最优解。 例4 用隐枚举法求解下列0—1规划问题 Max Z=3x1+2x2-5x3-2x4+3x5 x +x2+x3+2x4 +x5≤4 1 7x1 +3x3-4x4+3x5≤8 11x1-6x2 +3x4 +5x5≥3 x =0, 1, j=1, 2, 3, 4, 5. j 解: ①转化为求极小的问题 Min Z=-3x1-2x2+5x3+2x4-3x5 -x1 -x2-x3-2x4 -x5≥-4 -7x1 -3x3+4x4-3x5≥-8 11x1 -6x2 +3x4 +5x5≥3

x j =0, 1, j=1, 2, 3, 4, 5. ②令x'1=1-x1, x'2=1-x2, x'5=1-x5, 带入极小问题模型中,得 Min Z=3 x'1+2 x'2+5x3+2x4+3 x'5-8 x' 1 +x'2-x3-2x4 +x'5≥-1 7x'1 -3x3+4x4+3x'5≥2 -11x'1 +6x'2 +3x4-5x'5≥-7 x j =0, 1, j= 3, 4; x'j =0, 1, j= 1, 2, 5. ③目标函数中变量按系数大小排列,约束条件中变量排列顺序也相应调整,得Min Z=5x3+3 x'1+3 x'5+2 x'2+2x4-8 -x3+x'1 +x'5+x'2-2x4 ≥-1 ① -3x3+ 7x'1 +3x'5 +4x4≥2② -11x'1 -5x'5+6x'2 +3x4≥-7 ③ x j =0, 1, j= 3, 4; x'j =0, 1, j= 1, 2, 5. ④按目标函数值由小到大的顺序排列可能的解,并予以可行性检验。计算表格如下 可能的解 Z 是否满足约束 是否可行解备注 x 3x' 1 x' 5 x' 2 x 4 ①②③ 00000-8√×否 00001-6×否 00010-6√×否 00100-5√√√是* 01000-5√√×否 00011-4√√√是 停止 表4.1 ⑤最优解为x'5=1, x'1=x'2=x3=x4=0.

小学奥数枚举法题及答案

小学奥数枚举法题及答案【三篇】 【篇一】 枚举法问题 在一个圆周上放了1个红球和1994个黄球。一个同学从红球开始,按顺时针方向,每隔一个球,取走一个球;每隔一个球,取走一个球;……他一直这样操作下去,当他取到红球时就停止。你知道这时圆周上还剩下多少个黄球吗? 答案与解析: 根据题中所说的操作方法,他在第一圈的操作中,取走的是排在黄球中第2、4、6、……1994位置上的黄球,这时圆周上除了一个红球外,还剩下1994÷2=997个黄球。 在第二圈操作时,他取走了这997个黄球中,排在第1、3、5、7、……995、997位置上的黄球,这时圆周上除了一个红球外,还剩下997—(997+1)÷2=498个黄球。 他又要继续第三圈操作了,他隔过红球,又取走了这498个黄球中,排在第1、3、5、……495、497的位置上的黄球,这时圆周上除了一个红球外,还剩下498÷2=249个黄球。 因为在上一圈操作时,排在这498个黄球中最后一个位置上的黄球没有被取走,所以他再进行操作时,第一个被取走的就是那个红球,这时,他的操作停止,圆周上剩下249个黄球。 【篇二】 在一个圆周上放了1个红球和1994个黄球。一个同学从红球开始,按顺时针方向,每隔一个球,取走一个球;每隔一个球,取走一个球;……他一直这样操作下去,当他取到红球时就停止。你知道这时圆周上还剩下多少个黄球吗? 答案与解析:

根据题中所说的操作方法,他在第一圈的操作中,取走的是排在黄球中第2、4、6、……1994位置上的黄球,这时圆周上除了一个红球外,还剩下1994÷2=997个黄球。 在第二圈操作时,他取走了这997个黄球中,排在第1、3、5、7、……995、997位置上的黄球,这时圆周上除了一个红球外,还剩下997—(997+1)÷2=498个黄球。 他又要继续第三圈操作了,他隔过红球,又取走了这498个黄球中,排在第1、3、5、……495、497的位置上的黄球,这时圆周上除了一个红球外,还剩下498÷2=249个黄球。 因为在上一圈操作时,排在这498个黄球中最后一个位置上的黄球没有被取走,所以他再进行操作时,第一个被取走的就是那个红球,这时,他的操作停止,圆周上剩下249个黄球。 【篇三】

最优化之0-1规划的隐枚举法考试题

最优化之0-1规划的隐枚举法考试题 代码: function [intx,intf] = ZeroOneprog(c,A,b,x0) %目标函数系数向量,c %不等式约束矩阵,A %不等式约束右端向量,b %初始整数可行解,x0 %目标函数取最小值时的自变量值,intx %目标函数的最小值,intf sz = size(A); if sz(2) < 3 [intx,intf] = Allprog(c,A,b); %穷举法 else [intx,intf] = Implicitprog(c,A,b,x0); %隐枚举法end function [intx,intf] = Allprog(c,A,b) sz_A = size(A); rw = sz_A(1); col = sz_A(2); minf = inf; for i=0:(2^(col)-1) %枚举空间 x1 = myDec2Bin(i,col); %十进制转化为二进制if A*x1 >= b %是否满足约束条件 f_tmp = c*x1; if f_tmp < minf minf = f_tmp; intx = x1; intf = minf; else continue;

end else continue; end end function [intx,intf] = Implicitprog(c,A,b,x0)%隐枚举法 sz_A = size(A); rw = sz_A(1); col = sz_A(2); minf = c*x0; A = [A;-c]; b = [b;-minf]; %增加了一个限制分量 for i=0:(2^(col)-1) x1 = myDec2Bin(i,col); if A*x1 >= b f_tmp = c*x1; if f_tmp < minf minf = f_tmp; b(rw+1,1) = -minf; %隐枚举法与穷举法的区别在于此句 intx = x1; intf = minf; else continue; end else continue; end end function y = myDec2Bin(x,n) %十进制转化为二进制 str = dec2bin(x,n); for j=1:n y(j) = str2num(str(j)); end y = transpose(y); 题目:求下列0-1线性规划

整数规划隐枚举法实验报告

实验报告 名称:运筹学上机实习 一、实验的目的与要求 1、实现整数规划隐枚举法的计算机实现实验(本实验是通过c++编程实现的)。 2、实验成果要求 基本要求:能够完成整数规划隐枚举法的计算(给出的是标准形式的整数规划问题)。 提高要求:求解分成两种情况:(1)求最大值max。(2)求最小值min。 二、实验分析 由实验要求知,需要在运行界面里输入一个整数规划的标准型(包括系数矩阵,目标函数矩阵,b列值,变量x的取值矩阵),然后运行界面会返回输出结果。实验实现过程: #include #include /*本程序为整数规划隐枚举法*/ void main() { float a[30],c[30][30],b[30],c_b[30]; int x[30][100],m,n,i,j,p=0,shuru,e,f; //a[]为目标系数,c[][]系数矩阵,c_b[]判是否符合要求的数列,b[]为b 列值。 //x[][]为变量的取值,m行,n列。其中m行,n列是系数矩阵c[][]的行列值。 //shuru为选择变量(目标函数求最大max值输入1,目标函数求最小min值输入2)。 //本方法要将x1,x2,x3...的取值(0或1)以纵向形式(二进制形式)输入。cout<<"/*"<

形式)输入。"<>m; cout<<"请输入系数矩阵c[][]的列数n为:"<<"\n"; cin>>n; cout<<"请输入目标函数a[]的系数:"<<"\n"; for(i=0;i>a[i]; cout<<"请输入系数矩阵c[][]:"<<"\n"; for(i=0;i>c[i][j]; cout<<"b列值:"<<"\n"; for(i=0;i>b[i]; cout<<"请输入变量的取值(变量x1,x2,x3......只能取整数0和1,且以二进制的形式)"<<"\n"; cout<<"以纵向形式写出x[][]矩阵的取值"<<"\n"; cout<<"即:(x1,x2,x3...)T (x1,x2,x3...)T (x1,x2,x3...)T (x1,x2,x3...)T...:"<<"\n"; cout<<"(其中T表示矩阵的转置)"<>x[i][j]; for(i=0;i>shuru; float z=0.0; //目标函数求最大max值的情况 if(shuru==1) { //用试探法找初始可行解。 cout<<"目标函数求最大max值"<b[i]&&p<=pow(2,n)-1) {p++;

枚举法

浅谈数学枚举法思想 【摘要】 数学思想方法是数学中的理性认识,是数学的本质,是数学中高度抽象概括的内容,它蕴含于数学问题的解决过程中,它从教学内容中抽象和概括出来,是数学知识的精髓,是知识转化成能力的桥梁。枚举法就是一种重要的数学解题思想。 【关键字】 枚举法数学思想解题思想 【正文】 19世纪数学家西尔维斯特指出:“置身于数学领域中不断地探索和追求,能把人类的思维活动升华到纯净而和谐的境界。”阿巴斯诺特说:“数学知识是思维增加活力,使之摆脱偏见、轻信和迷信的束缚。”塞劳尔说:“正如文学诱导人们的情感一样,数学则启发人们的想象与推理。”总之,数学能令人的思维纯净、和谐,会为思维增添活力。 著名的日本科学家米山国藏指出:“作为知识的数学,出校门不到两年可能就忘了,深深铭记在头脑中的唯有数学的精神、数学的思想研究方法和着眼点,这些都随时随地发生动作,使人们终身受益。”【1】数学的精髓不在于知识本身,而在于数学知识中所蕴含的数学思想方法。枚举法、类比法、归纳法、分析法、综合法、化归法数学模型法等都是比较常见的数学思想方法,在这里,我将简单的谈一谈枚举法。 枚举法起源于原始的计数方法,即数数。在进行归纳推理时,如果逐个考察了某类事情的所有可能情况,因而得出一般结论,那么这结果是可靠的,这种方法叫做枚举法。从这里可以看出枚举法要将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。因而枚举法具有以下三个特点:第一,通过枚举法得到的结果肯定是正确的;第二,枚举法要将所有可能的答案列举出来,效率必然低下,浪费时间;第三,枚举法会涉及到求极值。 枚举法的这些特点,并不就意味着它是没有头绪的尝试、瞎蒙瞎撞,枚举法也有它的解题思路。首先要确定枚举对象、枚举范围和判定条件,其次要一一列举可能的解,验证是否是问题的正确的解。【2】 以百钱买鸡的题目为例,“一只公鸡,价值三元钱;一只母鸡,价值两元钱;三只小鸡,价值一元钱。百钱买百鸡,,问公鸡、母鸡、小鸡各可以买多少只?”这条题目很显然需要用枚举法来解答,枚举对象即为公鸡、母鸡、小鸡,将它们分别设为a、b、c,以三种鸡的总数a+b+c和买鸡用去的钱3a+2b+(c÷3),并且a、b、c均为小于100的正整数作为判定条件枚举公鸡、母鸡、小鸡的个数。除此之外,三种鸡的总数是固定不变的,那么我们可以只枚举公鸡a和母鸡b,小鸡就可以根据约束条件求得为c=100-a-b,这样可以缩小枚举的范围,最终可通过分析枚举求得: 公鸡a 母鸡b小鸡c

小学数学知识点之枚举法解析

小学数学知识点之枚举法解析 小芳为了给灾区儿童捐款,把储蓄罐里的钱全拿了出来。她想数数有多少钱。小朋友,你知道小芳是怎么数的吗?小芳是个聪明的孩子,她把钱按1分、2分、5分、1角、2角、5角、1元等分类去数。所以很快就数好了。 小芳数钱,用的就是分类枚举的方法。这是一种很重要的数学思考方法,在很多问题的思考过程中都发挥了很大的作用。下面就让我们一起来看看它的本领吧! 经典试题 例[1] 下图中有多少个三角形? 分析我们可以根据图形特征将它分成3类: 第一类: 有6个; 第2类: 有6个; 第3类: 有3个; 解 6+6+3=15(个)图中有15个三角形。 例[2]下图中有多少个正方形? 分析根据正方形边长的大小,我们将它们分成4类。 第1类:由1个小正方形组成的正方形有24个; 第2类:由4个小正方形组成的正方形有13个;

第3类:由9个小正方形组成的正方形有 4个; 第4类:由16个小正方形组成的正方形有1个。 解 24+13+4+1=42。图中有42个正方形。 例[3] 在算盘上,用两粒珠子可以表示几个不同的三位数:分别是哪几个数? 分析根据两粒珠子的位置,我们可将它们分成3类: 第1类:两粒珠子都在上档,可以组成505,550; 第2类:两粒珠子都在下档,可以组成101,110,200; 第3类:一粒在上档,另一粒在下档,可以组成510,501,150,105,600。 解可以表示101,105,110,150,200,501,505,510,550,600共10个三位数。 例[4] 用数字7,8,9可以组成多少个不同的三位数?分别是哪几个数? 分析根据百位上数字的不同,我们可以将它们分成三类: 第1类:百位上的数字为7,有789,798; 第2类:百位上的数字为8,有879,897; 第3类:百位上的数字为9,有978,987。 解可以组成789,798,879,897,978,987共6个三位数。 例[5] 往返于南京和上海之间的沪宁高速列车沿途要停靠常州、无锡、苏州三站。问:铁路部门要为这趟车准备多少种车票? 分析我们可以根据列车的往与反把它们分成两大类(注:为了方便,我们将上述地点简称为宁、常、锡、苏、沪): 在第一大类中,我们又可以根据乘客乘车时所在起点站的不同分成4类。 第1类:从宁出发:宁常,宁锡,宁苏,宁沪,4种; 第2类:从常出发:常锡,常苏,常沪,3种; 第3类:从锡出发:锡苏,锡沪,2种; 第4类:从苏出发:苏沪,1种。 我们同样可用刚才的方法将回来的车票分类,聪明的小朋友可能已经想到了,它的种数与第一大类完全相同。 解(4+3+2=1)×2=20(种)铁路部门要准备20种车票。 小结分类枚举的关键是正确分类,为此,必须注意两点: 一、分类要全、枚举要清。分类不全,就会造成遗漏。如上面例1中,如果一不小心,把第3类丢了,就会造成差错。当分类确定之后,要把每一类中每一个符合条件的对象都列举出来。 二、分类要清。因为如果分不清,使第1类中有第2类,第2类中有第3类,互相包含,那么就会有重复。这样结果也就很难正确了。

MATLAB枚举法求解 规划源程序及应用实例

M文件 function [intx,intf] = ZeroOneprog(c,A,b,x0) %目标函数系数向量,c %不等式约束矩阵,A %不等式约束右端向量,b %初始整数可行解,x0 %目标函数取最小值时的自变量值,intx %目标函数的最小值,intf sz = size(A); if sz(2) < 3 [intx,intf] = Allprog(c,A,b); %穷举法 else [intx,intf] = Implicitprog(c,A,b,x0); %隐枚举法end function [intx,intf] = Allprog(c,A,b); sz_A = size(A); rw = sz_A(1); col = sz_A(2); minf = inf; for i=0:(2^(col)-1) %枚举空间 x1 = myDec2Bin(i,col); %十进制转化为二进制if A*x1 >= b %是否满足约束条件

if f_tmp < minf minf = f_tmp; intx = x1; intf = minf; else continue; end else continue; end end function [intx,intf] = Implicitprog(c,A,b,x0)%隐枚举法sz_A = size(A); rw = sz_A(1); col = sz_A(2); minf = c*x0; A = [A;-c]; b = [b;-minf]; %增加了一个限制分量 for i=0:(2^(col)-1) x1 = myDec2Bin(i,col); if A*x1 >= b

相关主题