[G+smo]边界和角点

1. 确定多片模型中各个片的顺序

借助Paraview.打开Pipeline brower下方的information选项卡,可以看到Data Hierarchy中的multi-block dataset. 选定其中一个block, 可以查看其几何区域和边界的范围。由这个信息可以确定片的顺序。

打开gsview.pvd -> Properties Apply -> filters Alphabetical Extract block, create ExtractBlock1 并选中它 -> Properties apply -> properties, block indices

通过该信息可以准确确定block的编号;


2. 确定每个片的边界

每个片的边界编号按逆时针编号为 1 3 2 4 ,分别为西南东北。

利用./gsMakeMultipatch 输出的makeMultiPatchOutput.xml, 文件的最后一部分代表其边界拓扑信息。

利用这些信息可以确定边界的编号


例如

 <MultiPatch parDim="2" id="0">
  <patches type="id_range">0 1</patches>
  <interfaces>1 2 0 1 0 1 1 1
</interfaces>
  <boundary>1 4
1 3
0 4
0 3
0 2
1 1
</boundary>
 </MultiPatch>

表示:
[15:17:49] Angelos Mantzaflaris: patch 1 side 2 matches with patch 0 side 1
[15:18:25] Angelos Mantzaflaris: patch 1 side 4(north) is a boundary
[15:20:07] Angelos Mantzaflaris: opposite to the inteface: patch 1 --> side 1(west), 0 -->side 2(east)




   
These definitions are used by, e.g., boxSide, boxCorner, etc.

    The sides are numbered as follows:

    2D CASE                              |    3D CASE
    -------------------------------------|----------------------------------------
    Edge 1, {(u,v) : u = 0} :  \c west   |    Face 1, {(u,v,w) : u = 0}:  \c west
    Edge 2, {(u,v) : u = 1} :  \c east   |    Face 2, {(u,v,w) : u = 1}:  \c east
    Edge 3, {(u,v) : v = 0} :  \c south  |    Face 3, {(u,v,w) : v = 0}:  \c south
    Edge 4, {(u,v) : v = 1} :  \c north  |    Face 4, {(u,v,w) : v = 1}:  \c north
    &nbsp;                |    Face 5, {(u,v,w) : w = 0}:  \c front
    &nbsp;                |    Face 6, {(u,v,w) : w = 1}:  \c back

    \c none is a special compatibility value used to denote that this is not a boundary.

    The corners are numbered as follows:

    2D CASE                                            |    3D CASE
    ---------------------------------------------------|----------------------------------------
    Corner 1, {(u,v) : u = 0, v = 0} :  \c southwest   |    Corner 1, {(u,v,w) : u = 0, v = 0, w = 0}:  \c southwestfront
    Corner 2, {(u,v) : u = 1, v = 0} :  \c southeast   |    Corner 2, {(u,v,w) : u = 1, v = 0, w = 0}:  \c southeastfront
    Corner 3, {(u,v) : u = 0, v = 1} :  \c northwest   |    Corner 3, {(u,v,w) : u = 0, v = 1, w = 0}:  \c northwestfront
    Corner 4, {(u,v) : u = 1, v = 1} :  \c northeast   |    Corner 4, {(u,v,w) : u = 1, v = 1, w = 0}:  \c northeastfront
    &nbsp;                |    Corner 5, {(u,v,w) : u = 0, v = 0, w = 1}:  \c southwestback
    &nbsp;                |    Corner 6, {(u,v,w) : u = 1, v = 0, w = 1}:  \c southeastback
    &nbsp;                |    Corner 7, {(u,v,w) : u = 0, v = 1, w = 1}:  \c northwestback
    &nbsp;                |    Corner 8, {(u,v,w) : u = 1, v = 1, w = 1}:  \c northeastback
任务描述 本关任务:使用python实现smo算法,并通过社交网络数据中训练集对模型进行训练,再对测试集社交网络数据进行预测。 相关知识 为了完成本关任务,你需要掌握:1.序列最小优化算法,2.序列最小优化算法流程。 数据集介绍 数据集共包括400个样本,有年龄跟工资两个特征,标签为是否购买房产,1表示购买,0表示未购买。我们取300个样本作为训练集,100个样本作为测试集。部分数据如下: 获取数据代码如下: #获取数据 import pandas as pd dataset = pd.read_csv('./step3/Social_Network_Ads.csv') x = dataset.iloc[:, [2, 3]].values x = x.astype(float) y = dataset.iloc[:, 4].values #将0替换为-1 for i in range(len(y)): if y[i]==0: y[i]=-1 from sklearn.model_selection import train_test_split train_data, test_data, train_label, test_label = train_test_split(x, y, test_size = 0.25, random_state = 61) #特征标准化 from sklearn.preprocessing import StandardScaler sc = StandardScaler() train_data = sc.fit_transform(train_data) test_data = sc.transform(test_data) 序列最小优化算法 smo算法基本思想 支持向量机的学习问题可以形式化为求解凸二次规划问题。 这样的凸二次规划问题具有全局最优解, 并且有许多最优化算法可以用于这一问题的求解。 但是当训练样本容量很大时, 这些算法往往变得非常低效, 以致无法使用。 所以,如何高效地实现支持向量机学习就成为一个重要的问题。 目前人们已提出许多快速实现算法。其中最具代表的就是序列最小最优化算法(sequential minimaloptimization, smo)。 smo算法要解如下凸二次规划的对偶问题: min( 2 1 ​ sum i=1 m ​ sum j=1 m ​ alpha i ​ alpha j ​ y i ​ y j ​ k(x i ​ ,x j ​ )−sum i=1 m ​ alpha i ​ ) s.t.sum i=1 m ​ alpha i ​ y i ​ =0 0leqalpha i ​ leqC smo算法是一种启发式算法, 其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,smo算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。具体如下: 选择两个变量alpha 1 ​ ,alpha 2 ​ ,其它变量alpha i ​ ,i=3,4,..m是固定的。 于是,smo的最优化问题的子问题可以写成: min( 2 1 ​ k 11 ​ alpha 1 2 ​ + 2 1 ​ k 22 ​ alpha 2 2 ​ +y 1 ​ y 2 ​ k 12 ​ alpha 1 ​ alpha 2 ​ −(alpha 1 ​ +alpha 2 ​ )+y 1 ​ alpha 1 ​ sum i=3 m ​ y i ​ alpha i ​ k i1 ​ +y 2 ​ alpha 2 ​ sum i=3 m ​ y i ​ alpha i ​ k i2 ​ ) s.t.alpha 1 ​ y 1 ​ +alpha 2 ​ y 2 ​ =−sum i=3 m ​ y i ​ alpha i ​ =xi 0leqalpha i ​ leqC,i=1,2 其中: k ij ​ =k(x i ​ ,x j ​ ) smo算法目标函数的优化 为了求解上面含有这两个变量的目标优化问题,我们首先分析约束条件,所有的alpha 1 ​ ,alpha 2 ​ 都要满足约束条件,然后在约束条件下求最小。 根据上面的约束条件alpha 1 ​ y 1 ​ +alpha 2 ​ y 2 ​ =xi,0leqalpha i ​ leqC,i=1,2,又由于y 1 ​ ,y 2 ​ 均只能取值1或者-1, 这样alpha 1 ​ ,alpha 2 ​ 在[0,C][0,C]形成的盒子里面,并且两者的关系直线的斜率只能为1或者-1,也就是说alpha 1 ​ ,alpha 2 ​ 的关系直线平行于[0,C][0,C]形成的盒子的对线,如下图所示: 编程要求 请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,完成使用python实现smo算法的任务。 测试说明 平台会对你的代码进行运行测试,如果实际输出结果与预期结果相同,则通关;反之,则 GameOver。
最新发布
06-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值