zoukankan      html  css  js  c++  java
  • 使用 线性规划 解决 数字 排序问题, +Leapms模型

    问题

    将如下一组数字从大到小排序。

    {10, 20, -32, 177, 0, -11.5, 19, 7, 6.2, -6.28, -2.71, 44}

    解决办法

    建立数学模型,给出各个数字的次序值。

    模型

    设x[i]为第i个数的次序值。根据排序规则有如下约束:

    x[i] <= x[j] -1 | i=1,...,n; j=1,...,n; i<>j; d[i] >d[j] 

    希望次序值从1开始,最大不超过数字的总数:

    x[i] >= 1 | i=1,...,n

    x[i] <= n | i=1,...,n

    不需要目标:

    max 0

    最终模型为

    max 0
    subject to
    	x[i] <= x[j] -1 | i=1,...,n; j=1,...,n; i<>j; d[i] >d[j]
    	x[i] >= 1 | i=1,...,n
    	x[i] <= n | i=1,...,n
    where 
    	n is a number
    	d is a set
    	x[i] is a variable of nonnegative integer| i=1,...,n
    data_relation
    	n=_$(d)
    data
    	d={10, 20, -32, 177, 0, -11.5, 19, 7, 6.2, -6.28, -2.71, 44}

    求解

    +Leapms>load
     Current directory is "ROOT".
     .........
            sort.leap
     .........
    please input the filename:sort
    ================================================================
    1:  max 0
    2:  subject to
    3:      x[i] <= x[j] -1 | i=1,...,n; j=1,...,n; i<>j; d[i] >d[j]
    4:      x[i] >= 1 | i=1,...,n
    5:      x[i] <= n | i=1,...,n
    6:  where
    7:      n is a number
    8:      d is a set
    9:      x[i] is a variable of nonnegative integer| i=1,...,n
    10:  data_relation
    11:     n=_$(d)
    12:  data
    13:     d={10, 20, -32, 177, 0, -11.5, 19, 7, 6.2, -6.28, -2.71, 44}
    ================================================================
    >>end of the file.
    Parsing model:
    1D
    2R
    3V
    4O
    5C
    6S
    7End.
    ..................................
    number of variables=12
    number of constraints=90
    ..................................
    +Leapms>mip
    relexed_solution=0; number_of_nodes_branched=0; memindex=(2,2)
    The Problem is solved to optimal as an MIP.
    找到整数规划的最优解.非零变量值和最优目标值如下:
      .........
        x1* =5
        x2* =3
        x3* =12
        x4* =1
        x5* =8
        x6* =11
        x7* =4
        x8* =6
        x9* =7
        x10* =10
        x11* =9
        x12* =2
      .........
        Objective*=0
      .........
    +Leapms>

     对上述结果进行解释,x1*=5即第一个数放在第5位, x2*=3即第2个数放在 第2位,或者说12数字的次序数分别为5,3,12,1,8,11,4,6,7,10,9,2。

  • 相关阅读:
    UESTC cdoj 619 吴神,人类的希望 (组合数学)
    Codeforces Round #317 (Div. 2) D Minimization (贪心+dp)
    Codeforces Round #317 div2 E div1 C CNF 2 (图论,匹配)
    Codeforces Round #317 (Div. 2) C Lengthening Sticks (组合,数学)
    UVA 1412 Fund Management (预处理+状压dp)
    UVA
    codeforces Gym 100338F Spam Filter 垃圾邮件过滤器(模拟,实现)
    WebSocket 学习教程(二):Spring websocket实现消息推送
    dwr的ScriptSession和HttpSession分析
    WebSocket 学习教程(一):理论
  • 原文地址:https://www.cnblogs.com/leapms/p/10060013.html
Copyright © 2011-2022 走看看