zoukankan      html  css  js  c++  java
  • 整理阅读的论文(二)

                                                          事实上,优化问题的分水岭不是线性和非线性,而是凸性和非凸性。[1]
                                                                                                                                        ----(美)R.T.Rockafeller
     
          记得以前看过 Laplacian 优化算法介绍时,它的物理背景是一个弹簧的弹性能最小的模型(注1),好像里面还有一张配图(上网搜了一下,可惜没有搜到),当时自己弄不明白这两者是怎样联系在一起的。这篇文章 [2] ( 4 Laplacian smooth 一段)从优化的角度对两者之间的关系做了解释,这是我读这篇文章最大的收获。
          网格(包括二维和三维网格)优化问题常常转化为迭代方式求解。涉及到数学的迭代问题,自然有以下问题需要回答:迭代收敛吗?这个问题掰碎了来说还有诸多细节需要考虑(不考虑数值累计误差):如优化问题有唯一解吗?如果有多组解,迭代收敛到哪一个解?初值的选取对迭代的影响呢?
          下面具体到网格优化问题来讨论。先来解决第一个问题,什么时候优化问题有唯一解?由于凸目标函数有唯一的最优解,因此构造凸目标函数是一个常用的方法。幸运的是,Laplacian 优化的目标函数(连接内部节点长度的平方和或者是连接内部节点长度的平方和加上三角形面积之和)是一个凸函数。接着,该问题如何求解?迭代求解。针对Laplacian 优化的目标函数 f(x),有两种迭代实现方法。一种是直接从最值的必要条件出发,构造关于函数 f(x) 的梯度为0的方程组(该方程是一个非线性方程组),然后对节点坐标进行迭代,得到传统的Laplacian优化方案。二是利用梯度下降法进行迭代更新,不同于第一种方法每次对每个点的坐标进行更新,该方法是每次针对每个单元的三个节点进行更新。文中的结论是,采用梯度下降法构造的迭代格式能够很好地满足迭代的收敛性和初值选取的不敏感性。
          评价网格质量常常使用三角形的面积与三角形边长的平方和之比来评价,而 Laplacian 优化的目标函数给出的目标函数没有涉及到这一项,怎么解释?让我们退一步来看,假设使用面积与边长的平方和来作为目标函数,至少存在两个难以解决的现实困难,一个是问题解的唯一性很难保证,二是即便唯一性得到保证,目标函数的梯度(不论是基于节点的还是基于单元的)的求解相当复杂,不利于数值算法的实现。回过头再来看 Laplacian 优化的目标函数,它将乘除问题近似(注2)转化成加减问题(注3),从而能够把该问题使用数值方法有效求解,这可以通过传统的 Laplacian 的优化结果中来佐证。
           
          BTW:由于没有推导出文中的关于向量梯度的公式,只好以结论去对照理解记忆,这里就不解释了。还有,关于多边形的扩展形式的网格优化部分,自己看得也是一知半解。 

    注1:
          熟悉fluent的童鞋可以参见以下链接,里面介绍了其关于Laplacian优化的部分理论和软件的实现结果:
          http://blog.sina.com.cn/s/blog_599d8faa0100w3hn.html
          http://blog.sina.com.cn/s/blog_599d8faa0100w3z8.html
    注2:
          这种转化显然将网格的尺寸的影响效应放大了,原来的两个比值相同的结果近似为加减的形式之后显然不同,尺寸大的网格质量比尺寸小的网格质量更差,这可以通过文中所述的加权方式(5.1 Introducing weights一小节)去解决。
    注3:
          将乘除问题转化为加减问题常使用的一种方法是取对数,它带来两个好处,一是可以利用对数函数的性质得到一些结论,另一个是对于数值很小变化趋势不明显的数值,取对数常常使得问题的变化趋势很明显,如弹性力学中的工程应变就是对真实应变取对数得到的 [3],它满足可加性。


    参考文献:
           [1] 《凸优化》 P14, Stephen Boyd, Lieven Vandengerghe著,王书宁等译,2013年,清华大学出版社 
           [2]  Laplacian smoothing reviseited, Dimitris Vartziotis and Benjamin Himpel, 2014
           下载链接:http://arxiv.org/abs/1406.4333
           [3] http://blog.sina.com.cn/s/blog_588508f8010007d4.html
  • 相关阅读:
    android的NDK和java进行本地socket通信
    Android 8款开源游戏引擎
    Android使用AndEngine创建第一个程序
    J2ME项目移植到Android平台六大注意事项
    面面具到!android重力传感器
    android应用程序的混淆打包
    Android 5.0最应该实现的8个期望
    android service 的各种用法(IPC、AIDL)
    Android上怎样使用《贝赛尔曲线》
    Java序列化与反序列化学习(二):序列化接口说明
  • 原文地址:https://www.cnblogs.com/liuyc/p/4611606.html
Copyright © 2011-2022 走看看