我要解决一系列不平等问题。 这些不等式与圆圈堆积有关,我有N个圆圈,其余所有圆圈之间都是相互关联的。 我可以使用哪些功能来解决这个问题? 我尝试在MATLAB中使用Solve,但这不适用于不等式。 例如。给定3个圆,不等式的数量为(N *(N-1))/ 2,因此对于3个圆,我有3个方程。 我们将它们分别称为A,B和C,半径分别为200、300和400。 对于A,B和C,我有3个不同的不等式:
dist(a,b) >= 200+300
dist(b,c) >= 300+400
dist(c,a) >= 200+400
哪里
dist(p1,p2) = sqrt((p1.x - p2.x)^2 + (p1.y - p2.y)^2)
我想得到p1.x,p1.y,p2.x,p2.y,p3.x,p3.y,例如它们的距离最接近不等式的右侧。
有3个圆圈就没有问题,因为它始终是满足并最小化不平等现象的解决方案,但是问题出在我有很多圆圈时,例如10圈。
在这种情况下,目标是:
dist(a,b) = 200+300
dist(b,c) = 300+400
dist(a,c) = 200+400
现在,我将向您展示解决这个问题的想法是什么
syms x1 x2 x3 x4 x5 y1 y2 y3 y4 y5
//What I want to get
unknowns = [ x1 x2 x3 x4 x5 y1 y2 y3 y4 y5]
//Equations that must be satisfied
eqns(1) = sqrt((x1-x2)^2 + (y1-y2)^2) >= 300; // dist(1,2)>=300
eqns(2) = sqrt((x1-x3)^2 + (y1-y3)^2) >= 400; // dist(1,3)>=400
eqns(3) = sqrt((x1-x4)^2 + (y1-y4)^2) >= 350; // dist(1,4)>=350
eqns(4) = sqrt((x1-x5)^2 + (y1-y5)^2) >= 200; // dist(1,5)>=200
eqns(5) = sqrt((x3-x2)^2 + (y3-y2)^2) >= 320; // dist(2,3)>=320
eqns(6) = sqrt((x4-x2)^2 + (y4-y2)^2) >= 300; // dist(2,4)>=300
eqns(7) = sqrt((x5-x2)^2 + (y5-y2)^2) >= 330; // dist(2,5)>=330
eqns(8) = sqrt((x3-x4)^2 + (y3-y4)^2) >= 130; // dist(3,4)>=230
eqns(9) = sqrt((x3-x5)^2 + (y3-y5)^2) >= 120; // dist(3,5)>=400
eqns(10) = sqrt((x5-x4)^2 + (y5-y4)^2) >= 100; // dist(4,5)>=130
// My objective functions I want to optimize
objs(1) = sqrt((x1-x2)^2 + (y1-y2)^2) == 300; // dist(1,2)=300
objs(2) = sqrt((x1-x3)^2 + (y1-y3)^2) == 400; // dist(1,3)=400
objs(3) = sqrt((x1-x4)^2 + (y1-y4)^2) == 350; // dist(1,4)=350
objs(4) = sqrt((x1-x5)^2 + (y1-y5)^2) == 200; // dist(1,5)=200
objs(5) = sqrt((x3-x2)^2 + (y3-y2)^2) == 320; // dist(2,3)=320
objs(6) = sqrt((x4-x2)^2 + (y4-y2)^2) == 300; // dist(2,4)=300
objs(7) = sqrt((x5-x2)^2 + (y5-y2)^2) == 330; // dist(2,5)=330
objs(8) = sqrt((x3-x4)^2 + (y3-y4)^2) == 130; // dist(3,4)=230
objs(9) = sqrt((x3-x5)^2 + (y3-y5)^2) == 120; // dist(3,5)=400
objs(10) = sqrt((x5-x4)^2 + (y5-y4)^2) == 100; // dist(4,5)=130
// And now.. what can I use??
//Solve doesn't work...
solve(eqns, unknowns, IgnoreAnalyticConstraints)
我希望结果能够同时满足所有方程式,并且每对圆之间的距离最接近所需的距离,但是永远不会小于它。
这是一个图形示例: 如果我有这个输入 Input with 6 terminal nodes
输出应该是这样的,其中要考虑每对终端节点之间的距离: Output of 6 circles fixed
这是一个带有约束的圆包装问题,因为所有圆之间的距离必须与输入中绘制的圆尽可能近
试探法应为:
1.-添加第一个圆圈
2.-添加与第一个圆相连并满足所需距离的第二个圆
3.-添加与第一个和第二个相连并满足所需距离的第三个圆
4.- ....
也许我也可以尝试暴力破解吗?我不确定
非常感谢您