最近在做定位算法的复现问题,遇到了

Source Localization in Wireless Sensor Networks From Signal Time-of-Arrival Measurements

里面的一个半正定优化算法,因此选用cvxpy库实现。官方文档[cvxpy]的例程复现的算法都很简单,因此对该问题的借鉴意义不大。算法如下,

对我而言,首先的难度就是拼接矩阵后的半正定约束条件,起初是另设立两个矩阵变量,然后按部就班的增加限制条件。但最后求得的数据千奇百怪,与预测位置没有任何关系。
后来不断尝试更改约束限制的表达形式,但均无效果。
后来输出了每个变量的值查看,发现Q元素的物理意义为预测距离的平方,但是求出来的Q矩阵元素往往极大,因此擅自添加了一个约束条件,限制Q的最大元素在预测距离平方的量级上,完美解决问题。
附上代码。

class Program_t:def __init__(self,bt):self.BT = btself.BT_x = [b[0] for b in self.BT]self.BT_y = [b[1] for b in self.BT]self.T=[b[2] for b in self.BT]self.number = len(bt)def LS_steps(self):num = len(self.T)up_control = 2*max(self.T)**2#限制最大元素量级Q = cp.Variable((num,num))#待求变量tao = cp.Variable((num,1))#生成矩阵形式后面才可以拼接y_ = cp.Variable((2,1))y_s = cp.Variable((1,1))#矩阵形式用于拼接yita = 0.000005*sum(self.T) / num#论文给出的参数选择,可更改常数G = np.eye(num)-np.ones((num,num))t = np.array([self.T]).Texpr1 = cp.trace((cp.transpose(G)) @ G @ (Q- cp.multiply(2,t @ (cp.transpose(tao)))+t @ (cp.transpose(t))))expr2 = yita*cp.sum(Q)expr = expr1+ expr2#目标函数Q_ = cp.bmat([[Q,tao],[cp.transpose(tao),[[1]]]])#拼接矩阵Y = cp.bmat([[np.eye(2),y_],[cp.transpose(y_),y_s]])#拼接矩阵constraints = [Q_ >> 0, Y >> 0, cp.max(Q)<=up_control]#限制条件Q半正定,Y半正定,Q最大元素小于上限(这个约束非常重要,是我自己加上去的)for i in range(num):X = np.array([self.BT_x[i],self.BT_y[i],-1]).Tconstraints += [Q[i, i] == cp.transpose(X) @ Y @ X]#约束条件for j in range(i+1,num):X_j = np.array([self.BT_x[j], self.BT_y[j],-1]).Tconstraints += [Q[i, j] >= cp.abs(cp.transpose(X) @ Y @ X_j)]#约束条件obj = cp.Minimize(expr)prob = cp.Problem(obj, constraints)prob.solve()position = y_.valueprint(expr1.value)#输出值print(expr2.value)print(prob.value)#输出值print(prob.status)#输出状态print(position)return position

总结

1.理论算法与编程实现永远不等,不能轻易照搬,具体实现过程中要结合实际情况进行考虑,当求得的结果与预计相差很多时,可以尝试增加数值约束,因为计算机仿真只是近似,不是理论上的完美条件。
2.编程实现调用库时,最好按照库的标准写,如本例中矩阵点乘可以用numpy 的dot或者cvxpy的@,以及转置的.T和cp.transpose().但是dot有时会产生意想不到的情况,平白增加工作量。
3.复现算法时必须要对算法有深入理解,否则难以发现问题所在。
4.不要轻易怀疑工具包的问题,经过大量使用的工具包一定比你的感觉可靠。

python cvxpy下SDP问题编程相关推荐

  1. Python环境下的数据库编程

    数据库编程 简介 数据库三种数据模型 ADO.DAO.ODBC 使用DAO访问数据库 使用ODBC 访问数据库 三者区别 简介 在应用程序中有很多信息需要存储起来,存储的方式有多种,数据库就是其中的一 ...

  2. 全国青少年软件编程python等级考试-全国青少年软件编程等级考试:Python一级考试大纲...

    少儿编程:全国青少年软件编程等级考试 考试性质 全国青少年软件编程等级考试标准(Python)由中国电子学会科普培训与应用推广中心指定.由全国青少年电子信息科普创新联盟标准工作组开发,由中国电子学会普 ...

  3. 线上学python哪家好-Python线下培训好还是线上培训好

    原标题:Python线下培训好还是线上培训好 五年前培训的话,只要培训出来就有工作,因为那个时候国家缺少这个岗位,大肆宣传.所以那个时候是批量生产,培训学点,到公司有人带. 但是现在不缺人,缺的是人才 ...

  4. VII Python(9)socket编程

    VII Python(9)socket编程 socket编程: 网络基础: TCP/IP: socket模型: python socket C/S开发: 非阻塞(select.poll.epoll) ...

  5. python中单下划线_foo与双下划线_Python中单下划线和双下划线

    什么是 Python? Python 之父 Guido van Rossum 说:Python是一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法. 对于我来 ...

  6. python加入中小学课程_【python即将进入中学课堂,编程从小抓起,竟然在这几点上应验了】- 环球网校...

    [摘要]我们都知道,不论是我们使用的app,还是各种各样的游戏,小程序,都离不开编程软件的贡献,其中python占据了半壁江山,随着大家对python的重视,python即将进入中学课堂,这究竟是好是 ...

  7. python自学行_有编程基础Python自学行吗?

    有编程基础Python自学行吗?目前Python比较火爆,计算机基础越好对学习Python新的编程语言越有利.大学计算机专业C语言不是很好的入门语言,理解起来有些抽象.零基础学Python很容易上手, ...

  8. Python菜鸟入门:day16编程学习

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  9. python自学行吗-有编程基础Python自学行吗?

    有编程基础Python自学行吗?目前Python比较火爆,计算机基础越好对学习Python新的编程语言越有利.大学计算机专业C语言不是很好的入门语言,理解起来有些抽象.零基础学Python很容易上手, ...

最新文章

  1. 用计算机玩纸牌,《玩“纸牌”游戏》教学设计
  2. Restful API 架构与设计参考原则
  3. 5种ASP.NET页面间传递参数实例代码
  4. codeforces1437 E. Make It Increasing——最长上升子序列
  5. sap权限激活_sap角色权限设置手册V1.0
  6. Windows编程—BroadcastSystemMessage函数详解
  7. 基于Redis实现简单的分布式锁
  8. Terry的学习笔记--ASP.NET MVC 4 HELLO WORLD添加视图(View)
  9. redis 分布式锁流程图
  10. iOS 横竖屏切换解决方案
  11. 前台 时不时报 could not proxy request_长春中考成绩不理想可以报的高中
  12. ImageNet dataset下载
  13. 高中全国计算机信息学竞赛,高中信息学奥赛考什么
  14. 混淆矩阵 confusion matrices
  15. 上云一时爽,遇坑泪两行
  16. vue3+tsx 踩坑
  17. led的伏安特性曲线 matlab实现_灯泡伏安特性仿真实验的实现算法
  18. Truffle框架的初使用
  19. 本杰·格拉汉姆选股策略
  20. 遥感水文前景_我国“人才紧缺”的7大专业,就业前景好,快来看看

热门文章

  1. mac 设置文件服务器,mac服务器文件夹共享权限设置
  2. 金蝶专业版选择的服务器不正确,金蝶KIS专业版常见问题解决方法
  3. 1-【先导片】给年轻人的跨学科通识课-360P 流畅-AVC
  4. 物化实验计算机量子化学计算,量子化学计算实验详解.pdf
  5. [中国评书论坛] 社区登陆
  6. 戴尔移动工作站 Precision7740拆机简介(4个 M.2固态)
  7. 无法启动此程序,因为计算机中丢失 VCRUNTIME140_1.dll。
  8. Microsoft Remote Desktop的安装使用
  9. 【ubuntu】详解解压命令(.tar、.gz、.tar.gz、.bz2、.tar.bz2、.zip、.rar等)
  10. 详解sorted与sort用法