3 Star 1 Fork 0

BlackSheep / share

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
report.md 3.30 KB
一键复制 编辑 原始数据 按行查看 历史
BlackSheep 提交于 2020-09-17 13:50 . update report.md.

三个变量$L*、R_1、R_2$的关系如下: $\frac{\pi}{2} (\frac{L* - L_1}{R_1} + \frac{L_2-L*}{R_2}) = B$,
其中:
$L_1 = L * 0$
$L_2 = L * 1$
$L* = L * x_r$
$R_1 = R * r_{left}$
$R_2 = R * r_{right}$

由此可得:
$$\frac{\pi}{2} (\frac{L·x_r}{R·r_{left}} + \frac{L-L·x_r}{R·r_{right}}) = B$$

其中$L、B、R$都是常数, 因此研究的就是符合这个等式的$x_r、r_{left}、r_{right}$与discharge time的关系
这里采用机器学习网格搜索(grid search)的方式进行参数调优, 又因为三个变量, 固定其中两个时, 第三个变量的值也就确定了,因此网格搜索变量确定为($x_r、r_{left}$),其中$x_r$的初始搜索范围设置为(0,1)、$r_{left}$的初始搜索范围设置为(0, 1], 搜索步长都设为为0.1。

以上面的设置进行第一次寻优,就具体操作来说, 先将C++程序部署到linux服务器上, 然后通过终端工具MobaXterm,上传Python脚本到'root/fullcell-cpp/build_Ecker/bin'位置, 在linux上通过python修改参数txt文件中的$x_r、r_{left}、r_{right}$并保存, 然后通过os.popen()函数启动C++程序并过滤获取输出的discharge time值, 最后将每一组$x_r、r_{left}、r_{right}$与discharge time以追加('a')的形式写入到结果txt文件。

当循环完成后, 将结果txt文件下载到本地, 并用pandas将其读取为DataFrame结构,之后过滤其中$r_{right}$为负数或discharge time为Full的记录。 并画出$x_{left}$ - discharge time的二维散点图, trace名为$x_r$, 以此来区分不同的$x_r$组,这一步是为了确定相同$x_r$值时,$r_{left}、r_{right}$与discharge time的关系, 以及不同$x_r$时$r_{left}$与discharge time的关系的变化。

通过可视化和参数记录发现,相同$x_r$时,discharge time随着$r_{left}$的增大而增大,但放电时间最高即为3793.6,无法进一步提升,且$r_{left}=r_{right}=1$时discharge time取得最大值,对比多组$x_r$发现,$x_r$取何值似乎并不影响最高值的变化及$r_{left}$与discharge time的变化趋势。

根据上一步的假设, 我们继续进行$r_{left}、r_{right}$的二次寻优, 步距与之前相同, 搜索范围都为[0.1, 1], 比较不同的$r_{left}、r_{right}$组合对discharge time的影响(x_r值根据另外两个值计算得来)。类似的, 我们也将对应的各组参数配置导出为excel,同时进行可视化。

这个部分使用3D画图, 使用的python库为plotly。3D图中, 将$r_{left}$作为x轴,$r_{right}$作为y轴,$x_r为z$轴,discharge time为点的颜色值, 这样就可以呈现3个变量与1个目标值的可视化关系。此时, x和y斜对角线上的点, 就是$r_{left}=r_{right}$的点,而这些点恰恰也是discharge time最大的点, 这表示**$r_{right} = r_{left}$时,discharge time最优**

另一方面,将初始公式中的$x_r$单独化到一边, 可得:
$$x_r =\frac{2·B·R·r_{left}·r_{right} - \pi·L·r_{left}}{\pi·L·(r_{right} - r_{left})}$$

可以发现, $r_{right} = r_{left}$时, $x_r$取任意值都不影响

最终的结论就是,$r_{right} = r_{left}$时, discharge time最优, 此时$x_r$取任意值都不影响

Python
1
https://gitee.com/blackSheepWall0305/zhihu_share.git
git@gitee.com:blackSheepWall0305/zhihu_share.git
blackSheepWall0305
zhihu_share
share
master

搜索帮助