Java 需要帮助解决一些已知值的最小稀疏线性

Java 需要帮助解决一些已知值的最小稀疏线性,java,python-2.7,math,mathematical-optimization,cvxopt,Java,Python 2.7,Math,Mathematical Optimization,Cvxopt,我有下面描述的问题 我需要找到x1',x2',x3',x4',x5'的值 (x1-x1')^2+(x2-x2')^2+(x3-x3')^2+(x4-x4')^2+(x5-x5')^2=最小值 及 x1'+x2'+x3'+x4'+x5'=1 x1+x2+x3+x4+x5=1 注:我们知道a、b、c、d、e、x1、x2、x3、x4、x5的值 在这种情况下有人能帮我吗 我已尝试使用库,但无法添加条件以找到最小值 MPSolver solver = createSolver(solverTyp

我有下面描述的问题

我需要找到x1',x2',x3',x4',x5'的值

(x1-x1')^2+(x2-x2')^2+(x3-x3')^2+(x4-x4')^2+(x5-x5')^2=最小值

x1'+x2'+x3'+x4'+x5'=1

x1+x2+x3+x4+x5=1

注:我们知道a、b、c、d、e、x1、x2、x3、x4、x5的值

在这种情况下有人能帮我吗

我已尝试使用库,但无法添加条件以找到最小值

    MPSolver solver = createSolver(solverType);
    double infinity = MPSolver.infinity();

    MPVariable x1 = solver.makeNumVar(0.0, infinity, "x1");
    MPVariable x2 = solver.makeNumVar(0.0, infinity, "x2");
    MPVariable x3 = solver.makeNumVar(0.0, infinity, "x3");
    MPVariable x4 = solver.makeNumVar(0.0, infinity, "x4");
    MPVariable x5 = solver.makeNumVar(0.0, infinity, "x5");

    // 0.15 <= x1 <= 0.35
    MPConstraint c1 = solver.makeConstraint(-infinity, 0.35);
    c1.setCoefficient(x1, 1);   
    MPConstraint c2 = solver.makeConstraint(0.15, infinity);
    c2.setCoefficient(x1, 1);

    // 0.1 <= x2 <= 0.3
    MPConstraint c3 = solver.makeConstraint(-infinity, 0.3);
    c3.setCoefficient(x2, 1);   
    MPConstraint c4 = solver.makeConstraint(0.1, infinity);
    c4.setCoefficient(x2, 1);

    // 0.0 <= x3 <= 0.2
    MPConstraint c5 = solver.makeConstraint(-infinity, 0.2);
    c5.setCoefficient(x3, 1);   
    MPConstraint c6 = solver.makeConstraint(0.0, infinity);
    c6.setCoefficient(x3, 1);

    // 0.15 <= x4 <= 0.35
    MPConstraint c7 = solver.makeConstraint(-infinity, 0.35);
    c7.setCoefficient(x4, 1);   
    MPConstraint c8 = solver.makeConstraint(0.15, infinity);
    c8.setCoefficient(x4, 1);

    // 0.1 <= x5 <= 0.3
    MPConstraint c9 = solver.makeConstraint(-infinity, 0.3);
    c9.setCoefficient(x5, 1);   
    MPConstraint c10 = solver.makeConstraint(0.1, infinity);
    c10.setCoefficient(x5, 1);

    // x1 + x2 + x3 + x4 + x5 = 1
    MPConstraint c11 = solver.makeConstraint(-infinity, 1.0);
    c11.setCoefficient(x1, 1);
    c11.setCoefficient(x2, 1);
    c11.setCoefficient(x3, 1);
    c11.setCoefficient(x4, 1);
    c11.setCoefficient(x5, 1);

    MPConstraint c12 = solver.makeConstraint(1.0, infinity);
    c12.setCoefficient(x1, 1);
    c12.setCoefficient(x2, 1);
    c12.setCoefficient(x3, 1);
    c12.setCoefficient(x4, 1);
    c12.setCoefficient(x5, 1);

    MPObjective objective = solver.objective();
    objective.setCoefficient(x1, 1);
    objective.setCoefficient(x2, 1);
    objective.setCoefficient(x3, 1);
    objective.setCoefficient(x4, 1);
    objective.setCoefficient(x5, 1);
    objective.setMinimization();
MPSolver-solver=createSolver(solverType);
双无穷大=MPSolver.infinity();
MPVariable x1=solver.makeNumVar(0.0,无穷大,“x1”);
MPVariable x2=solver.makeNumVar(0.0,无穷大,“x2”);
MPVariable x3=solver.makeNumVar(0.0,无穷大,“x3”);
MPVariable x4=solver.makeNumVar(0.0,无穷大,“x4”);
MPVariable x5=solver.makeNumVar(0.0,无穷大,“x5”);

//这是一个具有凸目标函数的基本约束优化问题。 有很多软件可以帮助你做到这一点。e、 g.

我非常感谢龙先生

以下是他帮助我解决问题的解决方案:

#@author: Long Duong
#Using this : http://cvxopt.org/userguide/coneprog.html#quadratic-programming
#Need to install cvxopt using (pip install cvxopt --user)

from cvxopt import matrix, solvers

# Need to MODIFY the value here 
# Hold the value of x1,x2,x3,x4,x5 
xi = matrix([0.5,0.6,0.7,0.8,0.9])
# Hold the value for a,b,c,d,e 
cons = matrix([0.2,0.2,0.2,0.2,0.2])

### Main part #### 
# Ensure the contrain: x1' + x2' + x3' + x4' + x5' = 1
A = matrix([1.0,1.0,1.0,1.0,1.0], (1,5)) 
b = matrix(1.0)
# Ensure the contrain:  cons[i] -0.1 < x'[i] < cons[i] + 0.1
G = matrix([[1.0,0.0,0.0,0.0,0.0],
        [-1.0,0.0,0.0,0.0,0.0],
        [0.0,1.0,0.0,0.0,0.0],
        [0.0,-1.0,0.0,0.0,0.0],
        [0.0,0.0,1.0,0.0,0.0],
        [0.0,0.0,-1.0,0.0,0.0],
        [0.0,0.0,0.0,1.0,0.0],
        [0.0,0.0,0.0,-1.0,0.0],
        [0.0,0.0,0.0,0.0,1.0],
        [0.0,0.0,0.0,0.0,-1.0]]).T
temp = []
for i in range(5):
    temp.append(cons[i] + 0.1)
    temp.append(-1 * (cons[i] - 0.1))

h = matrix(temp)
# Now need to solve the main function to minimize sum((x'[i]-xi[i])^2)
# P is kind of identity matrix since (x-a)^2 = x^2 - 2ax + a^2  
P = 2 * matrix([[1.0,0.0,0.0,0.0,0.0],
           [0.0,1.0,0.0,0.0,0.0],
           [0.0,0.0,1.0,0.0,0.0],
           [0.0,0.0,0.0,1.0,0.0],
           [0.0,0.0,0.0,0.0,1.0]])
q = -2 * xi #  

# All done 
sol=solvers.qp(P, q, G, h, A, b)
print "[RESULT] :"
print sol['x']
#@作者:龙阳
#使用此选项:http://cvxopt.org/userguide/coneprog.html#quadratic-程序设计
#需要使用(pip install cvxopt--user)安装cvxopt
从cvxopt导入矩阵,解算器
#需要在此处修改该值
#保持x1、x2、x3、x4、x5的值
席=矩阵([0.0.60.0.70.8])
#保留a、b、c、d、e的值
cons=矩阵([0.2,0.2,0.2,0.2,0.2])
###主体部分
#确保合同:x1'+x2'+x3'+x4'+x5'=1
A=矩阵([1.0,1.0,1.0,1.0,1.0],(1,5))
b=矩阵(1.0)
#确保相反:cons[i]-0.1
您确实需要在Java中执行此操作吗?我认为像R或MATLAB这样的数字软件包更适合这种情况。@Tim Biegeleisen:非常感谢你的建议,因为我没有在MATLAB中工作的经验,所以我不知道如何开始。如果用MATLAB来解决这个问题,你能给我一些建议吗?我投票决定把这个问题作为离题题来结束,因为这是一个数学问题,而不是一个编程问题。我非常感谢你在这个问题上的帮助。我非常感激。