写第一篇论文(nash bargain)的坎坷历程

来源:互联网 发布:淘宝买快排被查 编辑:程序博客网 时间:2024/05/22 09:41

   保研后,大四第一学期开学一个月就来到交大了。因为之前暑期在浙大实习过,对实验室的生活有了一些了解,而且开了学,实验室人多了起来,所以在交大没有在浙大的苦闷,还是挺适应的。

   来了之后,先看了老师推荐的关于crowdsourcing的相关几篇论文,之后学习了decomposition和nash bargain这两个工具。另外,和一个师兄一起做和微软合作的关于测噪声的项目,全称是基于智能手机的群智感知系统的设计与实现。学期末参加了实验室的小比赛,讲述一篇论文,还获得了500块奖励。

   然后老师就让我用decomposition和nash bargain这两个工具写一篇论文,希望投到4月初的globecom。于是,从12月开始,我就在构思我的论文。到现在,才初步有了个模型(当然,从1月在学校的最后两周在忙年会的事,兴奋得实在没法做),还有20天就要发了,实验还没做完,论文还没下笔,有些小怵啊~~~~~~~~~

   2月份开学准备接着搞,发现之前做的东西都忘得差不多了,再加上听一个大神说大神都有博客,虽然在能力上达不到大神的程度,在形式上靠拢靠拢也是好的,于是下定决心自己写了博客,记录自己的科研生活,也为后来人提供一些参考。

   最初的模型很简单,在participatory sensing中,有任务要分配给手机。每个手机结点做一小时有自己的cost,所有手机做一小时有报酬p,一个手机做x小时,它的收益是p*x-cost*x。考虑两个目标,fairness和social welfare,fairness用jain‘s fairness指标表示,social welfare用所有手机的收益和表示。用nash bargain来平衡两个目标。约束是总任务时间小于等于规定时间。关键问题是jain’s fairness不是凸的。我用两个用户来构造模型,画出了jain‘s fairness的图,三维图旋转着看,某些地方确实是凹下去的。但是老师说要用随机的方法,选一万个点,看每个点上是否是凸的,有时候图上面看的不准确。后来有个例子(忘记是什么例子),让我发现老师讲的确实是对的,有时候图上面看的不准确。而且这种方法可以验证多维函数。证明一个函数是凸的,是NP难问题,我觉得这个方法是一个比较好的方法。之前我想jain’s fairness就一点点不是凸的,而且虽然不是凸的,从图上可以看出肯定有解,有师姐跟我说过她都是用手画出二维的或者一维的,看起来应该肯定是凸的,就直接说是凸的了。所以我就跟老师说可以解。后来老师说一点点不是凸的也不行,如果恰巧评选论文的老师比较懂数学怎么办,费劲也出来的论文,因为基础假设不成立就被打回来了。这样我就开始想怎样把这个问题变成凸优化问题,用了强化约束的方法,把上面的约束的小于等于变成等于。两个用户时是凸函数,四个用户时就不是了。之前看网上有的说证明凸函数只要证明二维就可以,因为函数的凹凸性不会随着维度变化,不然就不是函数的性质了。实践证明这是错的,函数的性质不会随着维数变化,但二维函数有的性质不一定就能作为这个一般函数的性质呀。后来又用了障碍函数法,将约束加到目标函数里面(参考一篇论文),也没法变凸。之后又看了几篇文章,发现文章都是找现成的凸函数,所以如果不是数学功底特别好,掌握很多非凸优化变成凸优化的技巧,还是找现成凸函数比较好。

    非凸变凸不可行,找老师讨论。老师给了两点意见:1.我们不是数学专业,重点不是非凸变凸,既然这个这么麻烦,找一个替代函数 2.多看看别的nash bargain文章在得到优化目标后做了什么,主要集中写了什么方面,不然就算我的目标是凸的,得到优化目标后也没什么可写的。于是我找了新的替代函数,在一篇论文(load balance vs energy efficiency in traffic engineering:A game theoretical perspective)中看到排队论的一个式子x/(c-x)的和。在运筹学上粗略看了下排队论,很多同概率分布什么的,原理没太看懂,感觉也套不上去,但函数形式倒也可以用。后来一个偶然的听报告的机会让我发现方差这个形式也可以。第二点意见真的很有用,写论文之前要多看别人的相关论文。我就是参考相关论文找到了decomposition的方法。而且在看这篇论文前根本不知道有没有用。此外,还从别的论文中找到了比较方法,怎么叙述nash bargain的好处等等。

    找到了替代函数和decomposition方法后跟老师又讨论了一下。模型做了些改动,这个下次再说。

    除了写论文,还跟男神师兄一起做项目。我主要负责windows azure和a weighting。在windows azure时还挺认真的,相关指导文档都看了一下。但是java资料比较少,c#比较多,java的方法要自己看最原始的文档,有些机制比较复杂难懂,还涉及到之前没学到的基础知识,在这些方面都有畏难心理和懒惰心理。做a-weighting时,学姐找好了资料和代码,但资料用到了数字滤波器,没学过啊,涉及到信号与系统,信息处理,通信,愁死了。后来学姐说这么成熟的东西肯定有人写好代码了,开始不相信,后来一个偶然的机会,仔细看了一下当时看着乱糟糟就扔到一边的代码,发现这就是答案啊。这个故事告诉我们畏难情绪不能有,不管什么东西,打开了就至少要大致知道讲的是什么,说不定i就是答案呢。后来我们要在手机上处理,要用java写a-weighting,但网上真的没有java代码,于是万能的珍妮学姐告诉我,有可以把matlab转化成java的工具。原来成熟的A计权没有现成的java代码是有原因的,任何事情能用简单的方法就用简单的方法来解决。整个项目都是男神师兄在撑,我狠狠不好意思啊,怪自己能力太弱,致命缺点是太懒。

    两周前,跟我一届的硕士生陆续到来,朱老师开始对我们大四学生进行一周一次的培训。下面摘取重点内容,也许对于即将做科研或者刚做科研但是老师没讲过的同学也很有帮助。

  1.科学家是自己发明方法,作为工科学生,是学会已有的方法,学会它的特点和使用范围,找到应用场景。

  2.论文研究流程:发现一个问题——>证明它是一个问题(有价值【理论/实际】;翻之前5-8年的论文,证明它没有被解决,了解别人做到什么程度;这个问题有难度)——>刻画这个问题(建模:随机过程是重要工具)——>给出自己的方法——>证明方法是好的(与最优解比或者用近似算法和bound比;与别人已有的方法比)。

   3.看完一篇论文或听完一篇报告,要学习做的好的;考虑针对该问题是否有更好的方法;考虑3个自己的方法。(个人认为非常有用)

   4.no pains,no gains。

     今天跟老师吃饭,问了老师是否需要深入了解碰到的问题,有时觉得深入了解费时费力,而且很多东西用不到,不用看,大致了解就行了,有时(想非凸变凸的时候)想要是我看过convex optimization该有多好,但是翻翻看又觉得太难了,看不懂。就这样来回纠结。老师说有些东西对于别人来说大致了解就行了,但对于我,一个博士生,就是要掌握别人不懂的知识,不然相比硕士生又有什么优势呢?硕士生做研究的时间短,很多东西大致了解就可以。但是东西不在多在精。重点掌握一门就行了。不过会10分钟看懂一篇论文也是本事,能快速获取想要的知识,忽略不重要的东西也是一种本事,要灵活掌握之间的度。

    平时最让我鄙视自己的就是遇到需要看的东西,总是考虑它是否需要,是不是在浪费时间,总想在最短的时间看完最多最需要的东西。实践证明,很多东西就算看之前觉得没什么用,看之后真的发现非常有用,看了就知道有用,没看就没用。一句话,谁看谁知道。如果我把第二个模型的decmoposition方法看的仔细点,而不是想先问问老师这个公平指标能不能用,能用再仔细看能不能接着做,不然不就是浪费时间了吗,就不会像现在老师改好了模型,我又发现好像跟我之前想的不一样,不大能用。跟老师讨论的机会非常稀少珍贵,在讨论之前,一定要掌握尽可能多的知识,以便能讨论出最正确的结果。如果这个decompositon真的不能用,那时我论文也写的差不多了,难道一切推到重来?不要想着讨论好了,再做,做了再讨论,老师时间很少,我这篇论文到现在也就跟老师讨论了四次。所以一定要尽可能掌握相关知识。这也验证了朱老师的那句话,很多事现在不做,以后可能要花很多倍的时间去做。

     红色的部分很想去学,还没时间,有机会一定要去学一下。加油吧,小菜鸟~~~与大家共勉
0 0
原创粉丝点击