pyhon中如何求函数的极大极小点?

问题描述 投票:0回答:1

我需要找到函数的最大最小值点。

有 2 个矩阵

M_A
M_B
,其中
M_A < M_B
I > M_B
(逐元素比较),其中
I
是全 1 的矩阵。

我需要找到最大

x
值(0 到 1 之间):

x*M_A+(1-x)*I >= M_B
(逐元素比较)

为此,我试图找到以下表达式

x*M_A+(1-x)*I - M_B
的根。为此,我通过取上述表达式的所有负项之和来定义标量函数 (
x*M_A+(1-x)*I - M_B
)。目标是找到
x
值使得
my_f(x)=0
。然而,满足这个条件的
x
有无限多个,例如
my_f(0)=0
。我想获得最大的
x

def my_f(x):
    matrix_comb = x*M_A + (1-x)*np.ones((n, n))
    matrix_diff = matrix_comb - M_B
    summ = 0
    for i in range(0, len(matrix_diff)):
        for j in range(0, len(matrix_diff)):
            if matrix_diff[i,j] <= 0:
                summ = summ + matrix_diff[i,j]
    return -summ

my_f(scipy.optimize.fminbound(my_f, 0, 1))

代码返回 0.85。然而,还有其他更大的

x
值满足条件。

python scipy root minimize
1个回答
0
投票

我从字面上解释你的问题;也就是说,你确实在寻找最大的

x
,但受你的不平等的影响;我忽略了为了做到这一点,我......之后的一切。因为寻根无助于实现这个目标。

import numpy as np
import scipy


rand = np.random.default_rng(seed=0)
m = 13
n = 7
M_A = rand.uniform(low=-1, high=1, size=(m, n))
M_B = rand.uniform(low=M_A, high=1, size=(m, n))

'''
Maximize x s.t.
0 <= x <= 1
x*M_A + (1-x)*ones >= M_B
x(MA - 1) >= MB - 1
'''

result = scipy.optimize.milp(
    c=-1,           # maximize
    integrality=0,  # continuous
    bounds=scipy.optimize.Bounds(lb=0, ub=1),
    constraints=scipy.optimize.LinearConstraint(
        A=M_A.reshape((m*n, 1)) - 1,
        lb=M_B.ravel() - 1,
    )
)
assert result.success, result.message

print('x =', result.x)
© www.soinside.com 2019 - 2024. All rights reserved.