1 Star 0 Fork 0

BlackSheep / share

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Without author's permission, this code is only for learning and cannot be used for other purposes.
Clone or download
report.md 3.30 KB
Copy Edit Web IDE Raw Blame History
BlackSheep authored 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$取任意值都不影响

Comment ( 0 )

Sign in for post a comment

Python
1
https://git.oschina.net/blackSheepWall0305/zhihu_share.git
git@git.oschina.net:blackSheepWall0305/zhihu_share.git
blackSheepWall0305
zhihu_share
share
master

Search