Это зависит от того, что вы подразумеваете под решением, у того, что вы описали, есть несколько решений, и это внутренность многогранника.
Это проблема линейного программирования, если вы хотите преобразовать задачу в
-0.7x_0 <=y_0 <= 0.7x_0
Предположим, нет, рассмотрим введение небольшого положительного числа m для создания линейной программы.
-0.7x_0 + m <=y_0 <= 0.7x_0 - m
Затем вы можете использовать scipy.optimize.linprog для решения линейной программы.
Если вас просто интересует конкретное решение, вы можете просто установить c в целевой функции равным нулю.
Edit:
import numpy as np
from scipy.optimize import linprog
m_size = 20
bound = 0.7
x_size = 100
y_size = 2 * x_size
small_m = 0
A = np.random.rand(m_size, x_size)
B = np.random.rand(m_size, y_size)
C = np.random.rand(m_size)
A_eq = np.hstack((A, B))
b_eq = C
sub_block = np.array([-bound, -bound ])
sub_block.shape = (2,1)
block = np.kron(np.eye(x_size), sub_block)
upper_block = np.hstack((block, - np.eye(y_size)))
lower_block = np.hstack((block, np.eye(y_size)))
A_ub = np.vstack((upper_block, lower_block))
b_ub = -small_m * np.ones( 2 * y_size)
bounds = tuple([tuple([0, None]) for i in range(x_size)] + [tuple([None, None]) for i in range(y_size)])
c = [0 for i in range(x_size+y_size)]
res = linprog(c, A_ub = A_ub, b_ub = b_ub, A_eq = A_eq, b_eq = b_eq, bounds = bounds)
x_part = res.x[:x_size]
y_part = res.x[x_size:]