得到Python中的某个数字组合

Get a certain combination of numbers in Python

在Python中是否有一个高效方便的解决方案来做类似的事情-

求两个数xy的最大组合,条件如下-

0 < x < 1000 
0 < y < 2000
x/y = 0.75
x & y are integers

使用简单的图形计算器很容易做到这一点,但试图在 Python

中找到最好的方法
import pulp  

My_optimization_prob = pulp.LpProblem('My_Optimization_Problem', pulp.LpMaximize) 

# Creating the variables
x = pulp.LpVariable("x", lowBound = 1, cat='Integer') 
y = pulp.LpVariable("y", lowBound = 1, cat='Integer') 

# Adding the Constraints
My_optimization_prob  += x + y #Maximize X and Y
My_optimization_prob  += x <= 999 # x < 1000
My_optimization_prob  += y <= 1999 # y < 2000
My_optimization_prob  += x - 0.75*y == 0 # x/y = 0.75


#Printing the Problem and Constraints
print(My_optimization_prob) 

My_optimization_prob.solve()  
#printing X Y
print('x = ',pulp.value(x))
print('y = ',pulp.value(y)) 


可能只是 -

z = [(x, y) for x in range(1, 1000) for y in range(1, 2000) if x/y==0.75]
z.sort(key=lambda x: sum(x), reverse=True)
z[0]
#Returns (999, 1332)

这样方便,不知道是不是最高效的方法

另一个可能的相对有效的解决方案是-

x_upper_limit = 1000
y_upper_limit = 2000
x = 0
y = 0
temp_variable = 0
ratio = 0.75

for i in range(x_upper_limit, 0, -1):
    temp_variable = i/ratio
    if temp_variable.is_integer() and temp_variable < y_upper_limit:
        x = i
        y = int(temp_variable)
        break

print(x,y)