【发布时间】:2018-04-15 22:24:18
【问题描述】:
我没有找到类似的主题,所以我问
我正在处理机制优化,我发现一堆变量作为长度、坐标和一些变量是 0 到 2pi 之间的角度。 限制之一是角度必须是连续的角度。我正在比较角度并在生成非连续角度时对解决方案进行惩罚,但当角度接近 2*pi 时我会丢失,因为有效的解决方案是例如:6、6.1、0.1、0.2 [rad]。
if( T2_1 == min(T2_1,T2_2,T2_3,T2_4,T2_5,T2_6) and
T2_2 == min(T2_2,T2_3,T2_4,T2_5,T2_6) and
T2_3 == min(T2_3,T2_4,T2_5,T2_6) and
T2_4 == min(T2_4,T2_5,T2_6) and
T2_5 == min(T2_5,T2_6) ):
M1 = 1e3 #Penalty
我使用 sorted 对角度进行排序,但我需要脚本“理解”角度应该是连续的,这样我需要将惩罚值添加到我要优化的函数中。
我获得了结果,但我限制了解决方案并且最小化不起作用
任何建议都会有所帮助
感谢您的阅读
编辑,澄清:
这是一个创建四杆机构的优化问题,角度代表四杆机构中杆的不同位置角度。我对该栏的相对位置感兴趣。
我的意思是从最低到最高的连续角度,但请记住,如果角度从 2*pi(第 4 象限)附近开始并继续变化到第 1 象限,那就是有效的解决方案。 示例:6.0, 6.1, 0.1, 0.2, 0.3, 0.5 [rad] 是连续角度,因为我对相对位置感兴趣,在这种情况下 0.1rad 实际上意味着0.1+2*PI; 0.2rad其实就是0.2+2*PI; 0.3rad 实际上表示 0.3+2*PI,而 0.5rad 实际上表示 0.5+2*PI。
如果我使用上述操作分析值,那么它会受到惩罚,因为 T2_1=6.0 不是这些值中的最小值(可能是角度但不是小数)。请记住,这些值是从 0 - 2PI 随机生成的,0.1rad 的值可能意味着 0.1rad 或 0.1+ 2*Pi rad 与前面的示例一样。
其他情况:
- 0.5, 1.0, 1.5, 2.0, 2.2, 2.5 [rad] - 有效(上面的函数适用于这种情况)
- 0.8, 6.1, 0.1, 0.2, 0.3, 0.5 [rad] - 无效
- 0.5、1.0、1.5、6.0、2.2、2.5 [rad] - 无效
- 5.5、6.0、6.28、1.0、1.2、1.5 [rad] - 有效
在编写编辑时,我意识到连续角度之间的差异必须有一个最大值;如果不是这样,每个角度都可能是另一个连续的角度,这会产生很大的跳跃。所以,也许我需要研究一下角度可以做出的最大跳跃。但是,我需要脚本来确定任何角度 Xrad 是否意味着 Xrad 或 X+2*Pi rad
我正在检查一个答案,因为我认为它可能会起作用。
对于这个复杂的问题,我很抱歉,这是一项正在进行的工作,我知道我需要进行更多调查,但我被 2*PI 附近的连续角度困住了,找不到任何地方的解决方案。
【问题讨论】:
-
目前还不清楚你在用这些角度做什么。 “连续角”是什么意思?但这里的答案可能会有所帮助:stackoverflow.com/questions/1878907/…
-
欢迎来到 StackOverflow。您的问题清晰易懂非常重要。正如已经问过的,“连续角”是什么意思?请阅读并关注FAQ 和How to Ask。
-
“其中一个限制是角度必须是连续的角度。”如果
6, 6.1, 0.1, 0.2是连续的(序列通过0 弧度),那么6, 0.1, 6.1, 0.2也是连续的(序列通过0 弧度两次)。 Post 需要对连续角度进行更严格的定义以消除任何序列。 -
我添加了一些说明。此时我正在尝试根据象限进行比较,如果第一个值在 3*Pi/2 和 2*PI 之间开始,则添加 2Pi 如果出现在第一象限,则到下一个
标签: python math trigonometry angle