C# 求满足不等式约束的{x,y}的离散对

C# 求满足不等式约束的{x,y}的离散对,c#,matlab,mathematical-optimization,linear-programming,nonlinear-optimization,C#,Matlab,Mathematical Optimization,Linear Programming,Nonlinear Optimization,关于{x,y},我有几个不等式,它们满足以下等式: x>=0 y>=0 f(x,y)=x^2+y^2>=100 g(x,y)=x^2+y^2<=200 x>=0 y> =0 f(x,y)=x^2+y^2>=100 g(x,y)=x^2+y^2=100和x^2+y^2对于一般的多项式不等式组,除了枚举搜索以外的任何方法,即使有有限数量的解,通常也不可能这样做。(也许我应该说,这是不平凡的,因为它是可能的。枚举搜索将工作,受到浮点问题的影响。)注意,感兴趣的领域不需要简单地

关于
{x,y}
,我有几个不等式,它们满足以下等式:

x>=0
y>=0
f(x,y)=x^2+y^2>=100
g(x,y)=x^2+y^2<=200
x>=0
y> =0
f(x,y)=x^2+y^2>=100

g(x,y)=x^2+y^2=100
和x^2+y^2对于一般的多项式不等式组,除了枚举搜索以外的任何方法,即使有有限数量的解,通常也不可能这样做。(也许我应该说,这是不平凡的,因为它是可能的。枚举搜索将工作,受到浮点问题的影响。)注意,感兴趣的领域不需要简单地连接到高阶不等式

编辑:OP询问了如何进行搜索

考虑一下这个问题

x^3 + y^3 >= 1e12
x^4 + y^4 <= 1e16

x >= 0, y >= 0
在我们可能测试过的100020001个组合中,我们找到了多少种解决方案

size(xy)
ans =
           2     4371264
诚然,穷举搜索更容易编写

tic
[x,y] = meshgrid(0:10000);
k = (x.^3 + y.^3 >= 1e12) & (x.^4 + y.^4 <= 1e16);
xy = [x(k),y(k)];
toc
请注意,浮点因素有时会导致找到不同数量的点,具体取决于计算的方式


最后,如果约束方程更复杂,则可能需要在表达式中使用y上边界的根,以帮助确定满足约束的位置。有趣的是,它仍然适用于更复杂的多项式边界。

@woodchips,这是不可能的,而且也没有算法?@Ngu:我认为问题不可能的一个含义是,没有算法来解决它。我同意@woodchips。如果你怀疑这一点,开始用笔和纸写下满足不等式的前几个(x,y)对。然后停下来想一想。对于一般问题,没有简单的解决办法。您可能只需要在一个变量上设置一个循环,比如x。将x固定为某个整数值,然后求解所有满足约束的y。问题是,它可能需要一些努力,只要证明,一旦你得到一个点,对于给定的x,y没有解,没有一个更大的x值可能会产生进一步的解。区间算术在这方面可能会有所帮助。@woodchips,如果多项式是已知的呢?@Jouni:不。按要求阅读问题。OP要求找到所有的解决方案。LP将产生一个解决方案。LP找不到整套解决方案。
size(xy)
ans =
           2     4371264
tic
[x,y] = meshgrid(0:10000);
k = (x.^3 + y.^3 >= 1e12) & (x.^4 + y.^4 <= 1e16);
xy = [x(k),y(k)];
toc
Elapsed time is 50.182385 seconds.