python中的多参数优化
我将优化三个变量python中的多参数优化,python,optimization,constraints,Python,Optimization,Constraints,我将优化三个变量x,alpha和R。 X是一维向量,alpha是二维向量,R是标量值。如何最大化此功能? 我写了以下代码: #from scipy.optimize import least_squares from scipy.optimize import minimize import numpy as np sentences_lengths =[6, 3] length_constraint=5 sentences_idx=[0, 1] sentences_scores=[.1,.2]
x
,alpha
和R
。
X
是一维向量,alpha
是二维向量,R
是标量值。如何最大化此功能?
我写了以下代码:
#from scipy.optimize import least_squares
from scipy.optimize import minimize
import numpy as np
sentences_lengths =[6, 3]
length_constraint=5
sentences_idx=[0, 1]
sentences_scores=[.1,.2]
damping=1
pairwise_idx=[(0,0),(0,1),(1,0),(1,1)]
overlap_matrix=[[0,.01],[.02,0]]
def func(x, R, alpha, sign=1.0):
""" Objective function """
return sign*(sum(x[i] * sentences_scores[i] for i in sentences_idx) - damping * R * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
x0=np.array([1,0])
R0=.1
alpha0=np.array([1,0,0,0])
def func_deriv(x, R, alpha, sign=1.0):
""" Derivative of objective function """
#Partial derivative to x
dfdX = sign*(sum(sentences_scores[i] for i in sentences_idx))
#Partial derivative to R
dfdR= sign*(- damping * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
#Partial derivative to alpha
dfdAlpha= sign*(- damping * R * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
return [ dfdX, dfdR, dfdAlpha]
cons = ({'type': 'ineq',
## Constraints: one constraint for the size + consistency constraints
#sum(x[i] * sentences_lengths[i] for i in sentences_idx) <= length_constraint
'fun' : lambda x: length_constraint - sum(x[i] * sentences_lengths[i] for i in sentences_idx) ,
'jac' : lambda x: [-sum(sentences_lengths[i] for i in sentences_idx), 0, 0]}
,{'type': 'ineq',
#alpha[i][j] - x[i] <= 0
'fun' : lambda x: [x[i]-alpha[i][j] for i,j in pairwise_idx],
'jac' : lambda x: [1.0, 0.0, -1.0]}
,{'type': 'ineq',
#alpha[i][j] - x[j] <= 0
'fun' : lambda x: [x[j]-alpha[i][j] for i,j in pairwise_idx],
'jac' : lambda x: [1.0, 0.0, -1.0]}
,{'type': 'ineq',
#x[i] + x[j] - alpha[i][j] <= 1
'fun' : lambda x: [1+alpha[i][j]-x[i]-x[j] for i,j in pairwise_idx],
'jac' : lambda x: [-1.0-1.0, 0.0, 1.0]})
res = minimize(func, (x0,R0,alpha0)
, args=(sentences_lengths
,length_constraint
,sentences_idx
,sentences_scores
,damping
,pairwise_idx
,overlap_matrix,)
, jac=func_deriv
, constraints=cons
, method='SLSQP'
, options={'disp': True})
#来自scipy.optimize导入最小二乘法
从scipy.optimize导入最小化
将numpy作为np导入
句子长度=[6,3]
长度约束=5
句子_idx=[0,1]
句子得分=[1,2]
阻尼=1
成对_idx=[(0,0)、(0,1)、(1,0)、(1,1)]
重叠矩阵=[[0.01],.02,0]]
def func(x,R,alpha,符号=1.0):
“目标函数”
返回符号*(求和(x[i]*句子中i的句子分数[i])-阻尼*R*求和(α[i][j]*重叠矩阵[i][j]中i,j成对)
x0=np.数组([1,0])
R0=.1
alpha0=np.数组([1,0,0,0])
def func_deriv(x,R,alpha,符号=1.0):
“目标函数的导数”
#对x的偏导数
dfdX=符号*(总和(句子中i的分数[i])
#对R的偏导数
dfdR=符号*(-阻尼*和(α[i][j]*重叠矩阵[i][j]用于成对的i,j_idx))
#α偏导数
dfdAlpha=符号*(-damping*R*和(α[i][j]*重叠矩阵[i][j]表示成对的i,j)
返回[dfdX、dfdR、dfdAlpha]
cons=({'type':'ineq',
##约束:大小+一致性约束的一个约束
#sum(x[i]*句子长度[i]表示句子中的i)104返回数组(a,dtype=dtype)
105
106
/asarray中的usr/local/lib/python3.5/dist-packages/numpy/core/numeric.py(a,数据类型,顺序)
529
530 """
-->531返回数组(a,数据类型,copy=False,order=order)
532
533
ValueError:使用序列设置数组元素。
我能完成这项任务
from scipy.optimize import least_squares
from scipy.optimize import minimize
import numpy as np
def func(x_f, *args, sign=1.0):
""" Objective function """
sentences_lengths, length_constraint, sentences_idx, sentences_scores, damping, pairwise_idx, overlap_matrix\
, x_ini_size, R0_size, alpha0_shape = args
x=x_f[:x_ini_size]
R=x_f[x_ini_size:x_ini_size+R0_size]
alpha=x_f[x_ini_size+R0_size:].reshape(alpha0_shape)
return sign*(sum(x[i] * sentences_scores[i] for i in sentences_idx) - damping * R * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
def func_deriv(x, R, alpha, sign=1.0):
""" Derivative of objective function """
#Partial derivative to x
dfdX = sign*(sum(sentences_scores[i] for i in sentences_idx))
#Partial derivative to R
dfdR= sign*(- damping * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
#Partial derivative to alpha
dfdAlpha= sign*(- damping * R * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
return [ dfdX, dfdR, dfdAlpha]
"""print(list(x_ini))
a = np.array([list(x_ini),list(R0),list(alpha0)])
print(a)
ccc=[x_ini,R0,alpha0]
print(x_ini)
print(list(ccc))
x0=np.concatenate([x_ini,R0,alpha0])
print(x0.flatten())"""
"""
pairwise_idx-------->>>
array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
overlap_matrix----------->>
array([[ 0. , 0.01],
[ 0.02, 0. ]])
alpha0--->>>
array([[1, 0],
[0, 0]])
"""
sentences_lengths =[6, 3]
length_constraint=5
sentences_idx=[0, 1]
sentences_scores=[.1,.2]
damping=1.0
pairwise_idx=np.array([[0, 0],[0, 1],[1, 0],[1, 1]])
overlap_matrix=np.array([[0,.01],[.02,0]])
x_ini=np.array([1,0])
R0=np.array([.1])
alpha0=np.array([[1,0],[0,0]])
x_ini_size = x_ini.size
R0_size = R0.size
alpha0_shape = alpha0.shape
x0 = np.concatenate([x_ini, R0, alpha0.flatten()])
#x1bnds = [int(s) for s in range(0,2)]
#x1bnds=np.array([0,1])
#x1bnds=np.array([0,2], dtype=int)
#x1bnds = ((0,0),(1,1))
x1bnds =np.arange(0,2, 1)
x2bnds = (0, 1)
Rbnds = (0, 1)
alpha1bnds= [0, 1]
alpha2bnds= [0, 1]
alpha3bnds= [0, 1]
alpha4bnds= np.array([0,2], dtype=int)
bnds = (x1bnds, x2bnds, Rbnds, alpha1bnds, alpha2bnds, alpha3bnds, alpha4bnds)
#x=x_f[:x_ini_size]
#alpha=x_f[x_ini_size+R0_size:].reshape(alpha0_shape)
"""cons = ({'type': 'ineq',
## Constraints: one constraint for the size + consistency constraints
#sum(x[i] * sentences_lengths[i] for i in sentences_idx) <= length_constraint
'fun' : lambda x_f: np.array([length_constraint - sum(x_f[:x_ini_size][i] * sentences_lengths[i] for i in sentences_idx)])
, 'jac' : lambda x_f: np.array([-sum(sentences_lengths[i] for i in sentences_idx), 0, 0])}
,{'type': 'ineq',
#alpha[i][j] - x[i] <= 0
'fun' : lambda x_f: np.array([x_f[:x_ini_size][i]-x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([1.0, 0.0, -1.0])}
,{'type': 'ineq',
#alpha[i][j] - x[j] <= 0
'fun' : lambda x_f: np.array([x_f[:x_ini_size][j]-x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([1.0, 0.0, -1.0])}
,{'type': 'ineq',
#x[i] + x[j] - alpha[i][j] <= 1
'fun' : lambda x_f: np.array([1+x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j]-x_f[:x_ini_size][i]-x_f[:x_ini_size][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([-1.0-1.0, 0.0, 1.0])})
"""
cons = ({'type': 'ineq',
## Constraints: one constraint for the size + consistency constraints
#sum(x[i] * sentences_lengths[i] for i in sentences_idx) <= length_constraint
'fun' : lambda x_f: np.array([length_constraint - sum(x_f[:x_ini_size][i] * sentences_lengths[i] for i in sentences_idx)])
}
,{'type': 'ineq',
#alpha[i][j] - x[i] <= 0
'fun' : lambda x_f: np.array([x_f[:x_ini_size][i]-x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j] for i,j in pairwise_idx])
}
,{'type': 'ineq',
#alpha[i][j] - x[j] <= 0
'fun' : lambda x_f: np.array([x_f[:x_ini_size][j]-x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j] for i,j in pairwise_idx])
}
,{'type': 'ineq',
#x[i] + x[j] - alpha[i][j] <= 1
'fun' : lambda x_f: np.array([1+x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j]-x_f[:x_ini_size][i]-x_f[:x_ini_size][j] for i,j in pairwise_idx])
})
res = minimize(func
, x0
, args=(sentences_lengths
, length_constraint
, sentences_idx
, sentences_scores
, damping, pairwise_idx
, overlap_matrix
, x_ini_size
, R0_size
, alpha0_shape)
, method='SLSQP'
#, jac=func_deriv
, constraints=cons
, bounds=bnds
, options={'disp': True})
#res = least_squares(fun, (x,R,alpha), jac=jac, bounds=bounds, args=(sentences_scores, damping,overlap_matrix), verbose=1)
print(res)
从scipy.optimize导入最小二乘法
从scipy.optimize导入最小化
将numpy作为np导入
def func(x_f,*args,符号=1.0):
“目标函数”
句子长度、长度约束、句子idx、句子分数、阻尼、成对idx、重叠矩阵\
,x_ini_size,R0_size,alpha0_shape=args
x=x_f[:x_ini_大小]
R=x_f[x_ini_size:x_ini_size+R0_size]
alpha=x_f[x_ini_size+R0_size:]重塑(alpha0_形状)
返回符号*(求和(x[i]*句子中i的句子分数[i])-阻尼*R*求和(α[i][j]*重叠矩阵[i][j]中i,j成对)
def func_deriv(x,R,alpha,符号=1.0):
“目标函数的导数”
#对x的偏导数
dfdX=符号*(总和(句子中i的分数[i])
#对R的偏导数
dfdR=符号*(-阻尼*和(α[i][j]*重叠矩阵[i][j]用于成对的i,j_idx))
#α偏导数
dfdAlpha=符号*(-damping*R*和(α[i][j]*重叠矩阵[i][j]表示成对的i,j)
返回[dfdX、dfdR、dfdAlpha]
“”“打印(列表(x_ini))
a=np.array([list(x_ini)、list(R0)、list(alpha0)])
印刷品(a)
ccc=[x_ini,R0,alpha0]
打印(x_ini)
打印(列表(ccc))
x0=np.连接([x_ini,R0,alpha0])
打印(x0.flatte())“”“
"""
成对\u idx------>>
数组([[0,0],
[0, 1],
[1, 0],
[1, 1]])
重叠矩阵----------------->>
数组([[0,0.01],
[ 0.02, 0. ]])
alpha0-->>>
数组([[1,0],
[0, 0]])
"""
句子长度=[6,3]
长度约束=5
句子_idx=[0,1]
句子得分=[1,2]
阻尼=1.0
成对数组([[0,0],[0,1],[1,0],[1,1])
重叠矩阵=np.数组([[0.01],.02,0]]
x_ini=np.array([1,0])
R0=np.array([.1])
alpha0=np.数组([[1,0],[0,0]])
x_ini_size=x_ini.size
R0_大小=R0.0大小
alpha0_形状=alpha0.shape
x0=np.连接([x_ini,R0,alpha0.flatte()]))
#x1bnds=[int(s)表示范围(0,2)内的s]
#x1bnds=np.array([0,1])
#x1bnds=np.array([0,2],dtype=int)
#x1bnds=((0,0),(1,1))
x1bnds=np.arange(0,2,1)
x2bnds=(0,1)
Rbnds=(0,1)
alpha1bnds=[0,1]
alpha2bnds=[0,1]
alpha3bnds=[0,1]
alpha4bnds=np.array([0,2],dtype=int)
bnds=(x1bnds、x2bnds、Rbnds、alpha1bnds、alpha2bnds、alpha3bnds、alpha4bnds)
#x=x_f[:x_ini_大小]
#alpha=x_f[x_ini_size+R0_size:]重塑(alpha0_形状)
“”“cons=({'type':'ineq',
##约束:大小+一致性约束的一个约束
#求和(x[i]*句子长度[i]表示句子中的i)我找到了答案
from scipy.optimize import least_squares
from scipy.optimize import minimize
import numpy as np
def func(x_f, *args, sign=1.0):
""" Objective function """
sentences_lengths, length_constraint, sentences_idx, sentences_scores, damping, pairwise_idx, overlap_matrix\
, x_ini_size, R0_size, alpha0_shape = args
x=(x_f[:x_ini_size])
R=x_f[x_ini_size:x_ini_size+R0_size]
alpha=(x_f[x_ini_size+R0_size:].reshape(alpha0_shape))
return sign*(sum((x[i]) * sentences_scores[i] for i in sentences_idx) - damping * R * sum((alpha[i][j]) * overlap_matrix[i][j] for i,j in pairwise_idx))
def func_deriv(x, R, alpha, sign=1.0):
""" Derivative of objective function """
#Partial derivative to x
dfdX = sign*(sum(sentences_scores[i] for i in sentences_idx))
#Partial derivative to R
dfdR= sign*(- damping * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
#Partial derivative to alpha
dfdAlpha= sign*(- damping * R * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
return [ dfdX, dfdR, dfdAlpha]
"""print(list(x_ini))
a = np.array([list(x_ini),list(R0),list(alpha0)])
print(a)
ccc=[x_ini,R0,alpha0]
print(x_ini)
print(list(ccc))
x0=np.concatenate([x_ini,R0,alpha0])
print(x0.flatten())"""
"""
pairwise_idx-------->>>
array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
overlap_matrix----------->>
array([[ 0. , 0.01],
[ 0.02, 0. ]])
alpha0--->>>
array([[1, 0],
[0, 0]])
"""
sentences_lengths =[6, 3]
length_constraint=5
sentences_idx=[0, 1]
sentences_scores=[.1,.2]
damping=1.0
pairwise_idx=np.array([[0, 0],[0, 1],[1, 0],[1, 1]])
overlap_matrix=np.array([[0,.01],[.02,0]])
x_ini=np.array([0,0])
R0=np.array([.1])
alpha0=np.array([[0,0],[0,0]])
x_ini_size = x_ini.size
R0_size = R0.size
alpha0_shape = alpha0.shape
x0 = np.concatenate([x_ini, R0, alpha0.flatten()])
#x1bnds = [int(s) for s in range(0,2)]
#x1bnds=np.array([0,1])
#x1bnds=np.array([0,2], dtype=int)
#x1bnds = ((0,0),(1,1))
#x1bnds =np.arange(0,2, 1)
x1bnds = (0, 1)
x2bnds = (0, 1)
Rbnds = (0, 1)
alpha1bnds= (0, 1)
alpha2bnds= (0, 1)
alpha3bnds= (0, 1)
alpha4bnds= (0, 1)
bnds = (x1bnds, x2bnds, Rbnds, alpha1bnds, alpha2bnds, alpha3bnds, alpha4bnds)
#x=x_f[:x_ini_size]
#alpha=x_f[x_ini_size+R0_size:].reshape(alpha0_shape)
"""cons = ({'type': 'ineq',
## Constraints: one constraint for the size + consistency constraints
#sum(x[i] * sentences_lengths[i] for i in sentences_idx) <= length_constraint
'fun' : lambda x_f: np.array([length_constraint - sum(x_f[:x_ini_size][i] * sentences_lengths[i] for i in sentences_idx)])
, 'jac' : lambda x_f: np.array([-sum(sentences_lengths[i] for i in sentences_idx), 0, 0])}
,{'type': 'ineq',
#alpha[i][j] - x[i] <= 0
'fun' : lambda x_f: np.array([x_f[:x_ini_size][i]-x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([1.0, 0.0, -1.0])}
,{'type': 'ineq',
#alpha[i][j] - x[j] <= 0
'fun' : lambda x_f: np.array([x_f[:x_ini_size][j]-x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([1.0, 0.0, -1.0])}
,{'type': 'ineq',
#x[i] + x[j] - alpha[i][j] <= 1
'fun' : lambda x_f: np.array([1+x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j]-x_f[:x_ini_size][i]-x_f[:x_ini_size][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([-1.0-1.0, 0.0, 1.0])})
"""
cons = ({'type': 'ineq',
## Constraints: one constraint for the size + consistency constraints
#sum(x[i] * sentences_lengths[i] for i in sentences_idx) <= length_constraint
'fun' : lambda x_f: np.array([length_constraint - sum(x_f[:x_ini_size][i] * sentences_lengths[i] for i in sentences_idx)])
}
,{'type': 'ineq',
#alpha[i][j] - x[i] <= 0
'fun' : lambda x_f: np.array([(x_f[:x_ini_size][i])-(x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j]) for i,j in pairwise_idx])
}
,{'type': 'ineq',
#alpha[i][j] - x[j] <= 0
'fun' : lambda x_f: np.array([(x_f[:x_ini_size][j])-(x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j]) for i,j in pairwise_idx])
}
,{'type': 'ineq',
#x[i] + x[j] - alpha[i][j] <= 1
'fun' : lambda x_f: np.array([1+(x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j])-(x_f[:x_ini_size][i])-(x_f[:x_ini_size][j]) for i,j in pairwise_idx])
}
,{'type':'eq'
,'fun': lambda x_f : np.array([(x_f[:x_ini_size][i]-int(x_f[:x_ini_size][i]))
for i in sentences_idx])})
res = minimize(func
, x0
, args=(sentences_lengths
, length_constraint
, sentences_idx
, sentences_scores
, damping, pairwise_idx
, overlap_matrix
, x_ini_size
, R0_size
, alpha0_shape)
, method='SLSQP'
#, jac=func_deriv
, constraints=cons
, bounds=bnds
, options={'disp': True})
#res = least_squares(fun, (x,R,alpha), jac=jac, bounds=bounds, args=(sentences_scores, damping,overlap_matrix), verbose=1)
print(res)
结果是相同的初始值。这不是很好吗?请在提出问题时尝试使用。
from scipy.optimize import least_squares
from scipy.optimize import minimize
import numpy as np
def func(x_f, *args, sign=1.0):
""" Objective function """
sentences_lengths, length_constraint, sentences_idx, sentences_scores, damping, pairwise_idx, overlap_matrix\
, x_ini_size, R0_size, alpha0_shape = args
x=(x_f[:x_ini_size])
R=x_f[x_ini_size:x_ini_size+R0_size]
alpha=(x_f[x_ini_size+R0_size:].reshape(alpha0_shape))
return sign*(sum((x[i]) * sentences_scores[i] for i in sentences_idx) - damping * R * sum((alpha[i][j]) * overlap_matrix[i][j] for i,j in pairwise_idx))
def func_deriv(x, R, alpha, sign=1.0):
""" Derivative of objective function """
#Partial derivative to x
dfdX = sign*(sum(sentences_scores[i] for i in sentences_idx))
#Partial derivative to R
dfdR= sign*(- damping * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
#Partial derivative to alpha
dfdAlpha= sign*(- damping * R * sum(alpha[i][j] * overlap_matrix[i][j] for i,j in pairwise_idx))
return [ dfdX, dfdR, dfdAlpha]
"""print(list(x_ini))
a = np.array([list(x_ini),list(R0),list(alpha0)])
print(a)
ccc=[x_ini,R0,alpha0]
print(x_ini)
print(list(ccc))
x0=np.concatenate([x_ini,R0,alpha0])
print(x0.flatten())"""
"""
pairwise_idx-------->>>
array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
overlap_matrix----------->>
array([[ 0. , 0.01],
[ 0.02, 0. ]])
alpha0--->>>
array([[1, 0],
[0, 0]])
"""
sentences_lengths =[6, 3]
length_constraint=5
sentences_idx=[0, 1]
sentences_scores=[.1,.2]
damping=1.0
pairwise_idx=np.array([[0, 0],[0, 1],[1, 0],[1, 1]])
overlap_matrix=np.array([[0,.01],[.02,0]])
x_ini=np.array([0,0])
R0=np.array([.1])
alpha0=np.array([[0,0],[0,0]])
x_ini_size = x_ini.size
R0_size = R0.size
alpha0_shape = alpha0.shape
x0 = np.concatenate([x_ini, R0, alpha0.flatten()])
#x1bnds = [int(s) for s in range(0,2)]
#x1bnds=np.array([0,1])
#x1bnds=np.array([0,2], dtype=int)
#x1bnds = ((0,0),(1,1))
#x1bnds =np.arange(0,2, 1)
x1bnds = (0, 1)
x2bnds = (0, 1)
Rbnds = (0, 1)
alpha1bnds= (0, 1)
alpha2bnds= (0, 1)
alpha3bnds= (0, 1)
alpha4bnds= (0, 1)
bnds = (x1bnds, x2bnds, Rbnds, alpha1bnds, alpha2bnds, alpha3bnds, alpha4bnds)
#x=x_f[:x_ini_size]
#alpha=x_f[x_ini_size+R0_size:].reshape(alpha0_shape)
"""cons = ({'type': 'ineq',
## Constraints: one constraint for the size + consistency constraints
#sum(x[i] * sentences_lengths[i] for i in sentences_idx) <= length_constraint
'fun' : lambda x_f: np.array([length_constraint - sum(x_f[:x_ini_size][i] * sentences_lengths[i] for i in sentences_idx)])
, 'jac' : lambda x_f: np.array([-sum(sentences_lengths[i] for i in sentences_idx), 0, 0])}
,{'type': 'ineq',
#alpha[i][j] - x[i] <= 0
'fun' : lambda x_f: np.array([x_f[:x_ini_size][i]-x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([1.0, 0.0, -1.0])}
,{'type': 'ineq',
#alpha[i][j] - x[j] <= 0
'fun' : lambda x_f: np.array([x_f[:x_ini_size][j]-x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([1.0, 0.0, -1.0])}
,{'type': 'ineq',
#x[i] + x[j] - alpha[i][j] <= 1
'fun' : lambda x_f: np.array([1+x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j]-x_f[:x_ini_size][i]-x_f[:x_ini_size][j] for i,j in pairwise_idx])
, 'jac' : lambda x_f: np.array([-1.0-1.0, 0.0, 1.0])})
"""
cons = ({'type': 'ineq',
## Constraints: one constraint for the size + consistency constraints
#sum(x[i] * sentences_lengths[i] for i in sentences_idx) <= length_constraint
'fun' : lambda x_f: np.array([length_constraint - sum(x_f[:x_ini_size][i] * sentences_lengths[i] for i in sentences_idx)])
}
,{'type': 'ineq',
#alpha[i][j] - x[i] <= 0
'fun' : lambda x_f: np.array([(x_f[:x_ini_size][i])-(x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j]) for i,j in pairwise_idx])
}
,{'type': 'ineq',
#alpha[i][j] - x[j] <= 0
'fun' : lambda x_f: np.array([(x_f[:x_ini_size][j])-(x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j]) for i,j in pairwise_idx])
}
,{'type': 'ineq',
#x[i] + x[j] - alpha[i][j] <= 1
'fun' : lambda x_f: np.array([1+(x_f[x_ini_size+R0_size:].reshape(alpha0_shape)[i][j])-(x_f[:x_ini_size][i])-(x_f[:x_ini_size][j]) for i,j in pairwise_idx])
}
,{'type':'eq'
,'fun': lambda x_f : np.array([(x_f[:x_ini_size][i]-int(x_f[:x_ini_size][i]))
for i in sentences_idx])})
res = minimize(func
, x0
, args=(sentences_lengths
, length_constraint
, sentences_idx
, sentences_scores
, damping, pairwise_idx
, overlap_matrix
, x_ini_size
, R0_size
, alpha0_shape)
, method='SLSQP'
#, jac=func_deriv
, constraints=cons
, bounds=bnds
, options={'disp': True})
#res = least_squares(fun, (x,R,alpha), jac=jac, bounds=bounds, args=(sentences_scores, damping,overlap_matrix), verbose=1)
print(res)
Optimization terminated successfully. (Exit mode 0)
Current function value: 0.0
Iterations: 1
Function evaluations: 9
Gradient evaluations: 1
fun: 0.0
jac: array([ 0.1 , 0.2 , 0. , 0. , -0.001, -0.002, 0. ])
message: 'Optimization terminated successfully.'
nfev: 9
nit: 1
njev: 1
status: 0
success: True
x: array([ 0. , 0. , 0.1, 0. , 0. , 0. , 0. ])