序列对+模拟退火算法

序列对+模拟退火算法

  1. github:https://github.com/Twl09008181/SequencePair-based-floorplan.git
  2. 解析文件
    • id都是从0开始,这样才符合C++数据结构,只有再设置一个map即可
  3. 初始化序列对,blockHeight,sp
    • 将blockHeight作为weight,生成weight_map,<id,weight>,并按照weight从小到大排列
    • 为了让前一半的weight,和另一半的weight的sum差不多<a1,a2,a3,a4>转为<a1,a4,a3,a2>
    • 将weight_map分为两半,l1和l2,S1 = <l1,l2> S1 = <l1,l2>
    • 记录s2的索引,遍历s1,与课本一样,返回length尾巴,作为width
    • 也就是利用LCS算法,得到width,Height,以及各个块排放的位置
  4. cost计算
    • 当出界时:return area * (1+100 * ration penalty)
    • 当不出界时: w * h
  5. move方法
    • op=0,rotate id1, 交换宽高
    • op=1,交换s1中的id1和id2,以及索引
    • op=2,交换s2中的id1和id2,以及索引
    • op=3,交换s1,s2中的id1和id2,以及索引
  6. 判断是否choose
    • chance < std::exp(-delta_cost * initTemp / temp);
    • 如果不选择,要recover
  7. movetime加到k * fp.sp.S1.size(),温度降低一次
  8. 温度小于某个值后,停止循环
  9. 循环10次,每次减小fitinRatio
  10. 模拟退火后,该代码计算cost用了线长,后期要改一改
变量名描述1描述2
alpha
blockNumstd::vectorid,width,height,llx,lly
terminalNumstd::map<size_t, size_t>id,index
outlinestd::pair<int,int>边界w和h
blockWidthstd::vector
blockHeightstd::vector
blockMapstd::mapstd::string,intblockName,i
TerminalMapstd::mapstd::string,int
terminalsstd::vectorint x,y;
Netliststd::vectorstd::list blocks;std::listterminals;
spS1, S2, S1_idx, S2_idxS1,S2只记录id,S1_idx, S2_idx记录id的索引
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值