mathematica软件解决实际问题——田忌赛马
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用mathematica解田忌赛马
一、问题描述:我国古代有“齐王赛马”的典故,说的是战
国时代的齐王与其大将田忌赛马,双方约定各出上、中、下3个等级的马匹进行比赛,这样共赛马3次,每次比
赛的败者付给胜者一百金。已知在同一等级马的比赛
中,齐王之马稳操胜券,但田忌的上、中等级的马可以
分别胜齐王的中、下等级的马。还是同样的马匹,由于
调换一下比赛的出场顺序,就得到转败为胜的结果。二、问题分析:在《运筹学基础》里我们学过对策论来解决
这类问题
通过对比发现,齐王获胜机会有5次,而田忌仅仅只有一次,此为运筹学对策论解释。。
三、问题求解:在mathematica里,编写一下程序:
上马 = 3;
中马 = 2;
下马 = 1; (“比赛时就是比马的速,大者获胜”)
单挑[甲马_Integer, 乙马_Integer] :=
Which[甲马 > 乙马, 甲胜, 甲马 < 乙马, 乙胜, True, 平局];(“齐威王、田忌决定的赛马出场次序”)
齐威王队 = {上马, 中马, 下马};
田忌队 = {下马, 上马, 中马};
MapThread[单挑, 齐威王队, 田忌队]
(“完整的比赛函数,它给出最然是哪个齐获胜”)比赛[{甲队名称_String, 甲队_}, {乙队名称_String, 乙队_}] :=
Module[{结果}, 结果 = MapThread[单挑, 甲队, 乙
队];
Which[Count[结果, 甲胜] > Count[结果, 乙胜], 甲
队名称 <> "胜利!",
Count[结果, 甲胜] < Count[结果, 乙胜], 乙队名称
<> "胜利!", True, "平局"]];
比赛[{"田忌队", 田忌队}, {"齐威王队", 齐威王
队}]
运行程序及结果如截图:
最终用mathematica求出比赛结果。