用lingo实现带约束条件的聚类分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序的关键是用LINGO语句写出目标函数和 约束条件,不必考虑优化过程是如何进行的 。 运行以上程序,得到结果如下:
第 1 组 : 2,3,4,5,6,7 , 总 里 程 387km , 总 邮 件 60,61。
第 2 组 : 1,11,12,13,14 , 总 里 程 344km , 总 邮 件55,50。
本文把有约束条件的聚类分析问题转化为0-1 整 数 规 划 , 然 后 用 LINGO 来 实 现 , 编 写 了 LINGO程序,程序只需要给定目标函数和约束 条件,而不必考虑算法过程和迭代步骤,研究 者的全部精力只需放在如何把目标函数和约束 条件写成LINGO语句。对于应用课题的研究者, 他们大多数并非专门研究聚类分析的专家,没 有更多的时间和精力来研究带约束条件的聚类 分析的算法,也不一定具有很强的编程能力, 于是利用优化软件LINGO,通过编写不太复杂 的程序,较快地解决实际问题,能够达到事半 功倍的效果。
在一些与图论和网络优化相关的应用课题中, 常常需要对网络节点作聚类分析,下面通过一个 实例介绍如何用LINGO实现带约束条件的网络节 点聚类分析。
某县邮政局管辖16个支局,已知县局到各支局 的距离和16个支局之间的距离矩阵(限于篇幅, 省略具体数据,详见文献[2])。寄达各支局以及各 支局收寄的邮件数量(单位:袋)为:
最 常 用 也 是 最 知 名 的 动 态 聚 类 方 法 有 Kmeans(K-均值)算法和K-medoids(K-中心点)算法, 这两种算法以事先确定的分类数目k为参数,按 照某种初始点选取原则选定k个初始聚点(聚点 是一组具有代表性的点,是形成类的中心)。
然后将其他个体归类于距离最近的聚点,重新
ENDDATA
@FOR( FL : @BIN( X)); @FOR(ZHIJU(I): @SUM(GROUP(K): X(I,K)) = 1); @FOR(GROUP(K):M(K)=@SUM(ZHIJU(I):X(I,K) )); @FOR(GROUP(K):YJ(K)=@SUM(ZHIJU(I):X(I,K )*P(I))); @FOR(GROUP(K):YD(K)=@SUM(ZHIJU(I):X(I, K)*Q(I))); @FOR(GROUP:YJ<=65); @FOR(GROUP:YD<=65); @FOR(GROUP(K):L(K)=@SUM(LINKS(I,J):C(I,J )*X(I,K)*X(J,K))); MIN=@SUM(GROUP:L/M); END
1 问题的提出
聚类分析通过分析数据,根据它们之间的相 似程度,合理地划分数据集合,使同一类别内 的个体差别尽量小,而不同类别上的个体差别 尽量大。聚类分析是寻求数据(样本)的自然 聚集结构的重要方法,经常被作为其他研究任 务的前奏和准备工作,在利用聚类分析将整个 数据集合分成不同的子集之后,其他研究就更 容易在聚类结果的基础上深入进行下去。
计算每个类的平均值,K-均值算法以这些均值 作为新的聚点,K-中心点算法以最靠近均值的 样本点作为新的聚点,对样本进行重新分类。
求出类内个体离差的平方和Si,通常把各类Si的 总和作为目标函数,当目标函数的值不再明显
变化时结束迭代。
当需要进行聚类分析时,通常可以采用具有 聚类分析功能的软件来实现,例如统计分析软 件SPSS具有强大的聚类分析功能,能够实现快 速聚类分析和层次聚类分析,对聚类方法和距 离的计算方法提供多种选项给用户选择,可以 满足大多数用户的需要。但是,当研究人员所 面临的课题有额外的附加约束条件时,SPSS就 无能为力了,此时只能采取编程计算的办法, 例如用Matlab或C语言来编程实现,这需要用户 既熟悉聚类分析的算法原理和步骤,又要有较 强的Matlab或C语言编程能力及功底,对一般研 究人员,不一定人人都能够做到,能否找到其 他解决办法?
15 16
Lk
Cij X ik X jk , k 1,2,3
i1 ji
X
ik
0或1
Baidu Nhomakorabea
2.2 用LINGO求解模型
编写程序如下: MODEL: SETS: ZHIJU/1..16/: P,Q; GROUP/1..3/:L,M,YJ,YD; FL( ZHIJU, GROUP): X; LINKS(ZHIJU,ZHIJU)|&2#GT#&1:C; ENDSETS
(1) 每个支局必须分到某一组,且只能分到一 组。
(3) 各组寄达和收寄的邮件总量都不超过65袋。 第k组内两两支局之间最短路经的总和为
15 16
组Lk 内 支局Cij数X i量k X为jk
i 1 ji
16
组内平均距离为Lkm/mk k
i 1
X
ik
优化分组的目标是使
3 Lk m k 1 k
达到最小。
DATA: P=10,15,6,9,13,6,11,4,13,17,11,2,11,21,13,14; Q=9,14,5,10,9,10,13,9,15,9,6,7,13,15,10,16; C=31 27 38 51 58 71 67 57 47 52 48 21 41 52 61
19 33 27 32 45 64 53 47 61 57 52 48 56 63 14 27 34 47 49 39 29 42 38 38 29 38 44 13 20 33 35 25 15 33 32 32 15 24 30 9 21 37 26 26 43 45 45 28 29 38 13 32 32 35 47 52 52 35 33 42 19 30 39 50 65 65 48 44 40 11 20 31 54 61 34 25 21 10 20 43 51 24 14 13 18 36 41 14 9 18 23 46 25 14 23 27 22 33 42 39 48 57 11 20 9;
聚类分析的方法主要有层次聚类法和快速聚 类法。层次聚类分析法又称系统聚类法,是目 前使用最多的一种聚类方法,它使具有共同特 点的样本(或变量)聚集在一起,根据观测值 或变量之间的亲疏程度,将最相似的对象结合 在一起,以逐次聚合(或分解)的方式将观测 值或变量分类。
快速聚类法也称划分法,又称动态聚类法。 该方法需要事先确定分类的数目k,然后将样本 空间(即所有对象)划分为k分,每个划分代表 一个类,所形成的分类状态使得一个客观标准 达到最优,实际上是逐步迭代寻优过程。
参考文献:
[1] 袁新生,等.LINGO和Excel在数学建模 中的应用[M].北京:科学出版社,2007.
[2] 王文召,等.一个邮政运输网络优化模型 及解法[J].计算机应用,2008(28):378-381.
组,Pi表示寄达支局Zi的邮件量,Qi表示从支 局Zi收寄的邮件量,引入0-1型决策变量Xik表示 支局i是否分在第k组,Xik=1表示支局i分在第k 组,Xik=0表示否。每两个支局之间均存在最短 路(有些支局之间没有直接通路,但存在经过
其它支局的间接路径),用Cij表示支局i与支局 j之间的最短路。约束条件如下:
综上所述,建立该问题的0-1规划模型如下:
min
3 Lk k 1 mk
3
X ik
1 , i 1,2,,16
k 1
mk 16 X ik , k 1,2,3
i1
16
Pi X ik 65 , k 1,2,3 i1
16
Qi X ik 65 , k 1,2,3
i1
2 用LINGO实现带约束条件的聚类分析
LINGO是求解最优化问题的专业软件,它在求 解各种大型线性、非线性和整数规划方面具有明 显的优势[1]。动态聚类分析算法的实质是迭代优化 过程,有明确的目标函数,当实际问题有附加的 约束条件时,可以把此类问题看成是规划问题。 求 解 规 划 问 题 是 LINGO 的 强 项 , 因 而 可 以 用 LINGO来实现带约束条件的聚类分析。
用LINGO实现 带约束条件的聚类分析
徐州空军学院 袁新生 刘信斌
摘要
在研究应用课题时可能会遇到带约束条件的 聚类分析。用SPSS等软件能够方便地进行聚类 分析,但是无法附加其他约束条件,只能考虑用 编程方法来实现。先将此类问题转化为0-1规划 模型,然后用优化软件LINGO进行求解,并且 以一个带约束条件的网络节点分组问题为实例, 编写了LINGO程序,求出了最优结果。
寄达各支局以及各支局收寄的邮件袋数
支局 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8 寄达 10 15 6 9 13 6 11 4 收寄 9 14 5 10 9 10 13 9 支局 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 寄达 13 17 11 2 11 21 13 14 收寄 15 9 6 7 13 15 10 16
试把这16个支局分成3组,组内各支局之间的 相互距离尽可能近,且每组内寄达各支局以及 从各支局收寄的邮件总数都不超过65袋。
这是带约束条件的聚类分析的具体应用,实 质是在满足约束条件的前提下,将16个支局聚 成3类,使类内各支局相互之间的距离最短。
2.1 建立0-1规划模型
用i=1,2,…,16表示16个支局,k=1,2,3表示3个
第3组:8,9,10,15,16,总里程150km,总邮件 61,59。
以上分组可以作为进一步规划邮车路线的参 考。
3 结语
用SPSS等软件实现聚类分析的优点是研究人 员不需要深入了解聚类分析的具体算法,不必 编写程序,只需要输入数据并设置一些聚类分 析的运行选项,就能够得到结果,这给广大应 用课题的研究者带来了极大的方便,但是,在 许多应用课题中,往往不是单纯的聚类分析, 而有附加的各种约束条件。此时SPSS无能为力, 可行的办法是编程求解。如果用Matlab或C语言 编程计算,必须从最底层的工作做起,这需要 研究者既熟悉聚类分析的算法原理和步骤,又 有较强的Matlab或C语言编程能力,这并非人人 都能够达到。