提问人:marsh 提问时间:2/11/2023 最后编辑:marc_smarsh 更新时间:10/27/2023 访问量:47
如何在 Xpress 中编写 epsilon 约束模型
How to code epsilon constraint model in Xpress
问:
我想使用ε约束方法求解一个问题,并绘制帕累托最优解集和帕累托前沿。
我认为我已经设法做到了这一点,因为我的结果看起来与我使用加权求和方法所取得的相似,尽管我需要讨论每种方法在获得帕累托前沿方面的效率,并且完全不知道该说什么。
任何帮助将不胜感激!
当我使用非常大的 epsilon 值时,它看起来“正常”,但是当我将其限制为小于我的一个函数的值范围时,它变得完全不同。
epsilon = np.linspace(0,9,25)
m_e = xp.problem(name='Prob1')
### Create decision variables and add them to the model ###
x = np.array([xp.var('x1',lb=-20), xp.var('x2',ub=20)], dtype=xp.npvar)
m_e.addVariable(x)
# Define objective vector
f1 = 2 + (x[0]-2)**2 + (x[1]-1)**2
f2 = 5*x[0] + (x[1]-5)**2
### Define constraints and add them to the model
m_e.addConstraint(x[0] -(3*x[1]) + 10 <= 0)
m_e.addConstraint(x[0]**2 + x[1]**2 <= 225)
###
### Set parameters and create arrays for storing solutions
# Array containing the pareto front
front = np.zeros((iterations,2))
# Array containing the pareto optimal points
pareto = np.zeros((iterations,2))
# Compute all the weights
###
# Create plots
fig, ax = plt.subplots(1,2)
iterations = 25
# loop through the number of required iterations
for i in range(iterations):
m_e.addConstraint(5*x[0] + (x[1]-5)**2 <= epsilon[i])
# Update objective value
m_e.setObjective(f1, sense = xp.minimize)
# Solve the model
m_e.solve()
# Store the pareto optimal point
pareto[i] = m_e.getSolution(x)
# Find the corresponding solutions in objective space
front[i,0] = xp.evaluate(f1,problem=m_e)
front[i,1] = xp.evaluate(f2,problem=m_e)
# Plot results
ax[0].scatter(pareto[i,0],pareto[i,1],color='blue')
ax[1].scatter(front[i,0],front[i,1],color='red')
### Set plot title ect ###
ax[0].set_ylabel(r'$x_2$')
ax[0].set_xlabel(r'$x_1$')
ax[0].set_title('Decision space space')
ax[1].set_ylabel(r'$f_2(x)$')
ax[1].set_xlabel(r'$f_1(x)$')
ax[1].set_title('Objective space')
fig.tight_layout(pad=1.0)
答: 暂无答案
评论
epsilon