如何求解多个绝对值式子总和的最小值

dianyancao 2012-05-25 11:24:56

如上式,Xi,Yi,Zi为 n 组已知数据,
求解m1, m2, m3 可以将每个绝对值式子,根据|·| > 0,|·| < 0,|·| = 0三种情形分别处理
是否有更高效的方法,求解m1, m2, m3呢?
...全文
1232 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dianyancao 2012-06-01
  • 打赏
  • 举报
回复
CSDN肿么了,回复不显示…,还好结贴页面能显示回复
______________________________________________________________
FancyMouse ()发表于:2012-05-31 03:13:15 10 楼 得分:
这个函数是凸函数。凸函数有通用的求最值的算法,不用展开abs。

______________________________________________________________

如何不展开abs,求解最值呢,不知下面的方法是否可行?

6楼的不等式组是将绝对值式中的除m1的其余部分先当作常量,
提取出m[1]的系数得到形如:

|a[1]|*|x + r[1]| + |a[2]|*|x + r[2]| + ... + |a[i]|*|x + r[i]| + ... |a[n]|*|x + r[n]|

的式子,则只需要将-r[1] <= -r[2] <= ... <= -r[i] <= ... <= -r[n]从小到大排列,即可求解m[1]

接着将r[i]代换成b[i] * m[2] + c[i],
索引排序使得b[1] >= b[2] >= ... >= b[i] >= ... >= b[n],
索引排序将每一个(c[j] - c[i]) / (b[i] - b[j])从小到大建立 1 到 n*(n-1)/2 的 bc索引,(i < j <= n)
则每一个 bc索引 = h(i,j)对应唯一的i,j
其中bc[h(i,j)] = (c[j] - c[i]) / (b[i] - b[j])


当m[2] <= bc[h(i,j)],则r[i] <= r[j]
当m[2] >= bc[h(i,j)],则r[i] >= r[j]


接着将c[i]代换成d[i]+e[i],根据 bc索引 的数据生成 bcbc索引,(m < n <= n*(n-1)/2)
则每一个 bcbc索引 = g(m,n) 对应唯一的h(i,j)[m], h(i,j)[n]
令每一个 P[h(i,j)] = (d[j] - d[i]) / (b[i] - b[j])
索引排序使得P[h(i,j)[1]] >= P[h(i,j)[2]] >= ... >= P[h(i,j)[n*(n-1)/2]],
令每一个 Q[h(i,j)] = (e[j] - e[i]) / (b[i] - b[j])
令每一个 bcbc[g(m,n)] = (Q[h(i,j)[n]] - Q[h(i,j)[m]]) / (P[h(i,j)[m]] - P[h(i,j)[n]]) , (m < n <= n*(n-1)/2)
索引排序使得bcbc[1] <= bcbc[2] <= ... <= bcbc[n*(n-1)/2 * (n*(n-1)/2 - 1) / 2]


当m[3] <= bcbc[g(m,n)],则bc[m] <= bc[n]
当m[3] >= bcbc[g(m,n)],则bc[m] >= bc[n]


接下来就得到6楼的联动不等式组,只需要对m[3]取最多(n*(n-1)/2 * (n*(n-1)/2 - 1) / 2) + 1个区间,
即可经过递推,展开abs。
如何根据这种联动的不等式组,求得m[1],m[2],m[3]的取值区间,使得最小化Sum呢?
FancyMouse 2012-05-31
  • 打赏
  • 举报
回复
这个函数是凸函数。凸函数有通用的求最值的算法,不用展开abs。
FancyMouse 2012-05-31
  • 打赏
  • 举报
回复
这个函数是凸函数。凸函数有通用的求最值的算法,不用展开abs。
FancyMouse 2012-05-31
  • 打赏
  • 举报
回复
这个函数关于三个变量都是凸函数。凸函数求数值最值有通用办法的,不用展开abs。
dianyancao 2012-05-29
  • 打赏
  • 举报
回复
Sum = a*m1 + b*m2 + c*m3 + d
dianyancao 2012-05-29
  • 打赏
  • 举报
回复
hnu_0720 2012-05-28
  • 打赏
  • 举报
回复
不要意思,没看清楚题目。
hnu_0720 2012-05-28
  • 打赏
  • 举报
回复
求解m1, m2, m3 可以将每个绝对值式子,根据|·| > 0,|·| < 0,|·| = 0三种情形分别处理

第一 大于0 只要有一个绝对值不等于0就可以了。
第二 小于0 不可能发生
第三 等于0 每个绝对值都等于0才发生,解方程就可以了。
HUNTON 2012-05-28
  • 打赏
  • 举报
回复
应该要提供其他的条件才可能判别是否有更简便的方法吧,不然就只能根据式子的正负去展开了。
FancyMouse 2012-05-26
  • 打赏
  • 举报
回复
L2模算起来方便。L1模的话还是需要用到凸函数的性质去二分(有些地方似乎叫三分?)
turing-complete 2012-05-25
  • 打赏
  • 举报
回复
这种不等式的方程,恐怕只能采用穷举法去一一断言了,符合条件的就留下了,不过这其中可以加上一些合理的剪枝算法,能够是搜索解集的过程更快一些。
发帖
数据结构与算法

3.2w+

社区成员

数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
帖子事件
创建了帖子
2012-05-25 11:24
社区公告
暂无公告