zoukankan      html  css  js  c++  java
  • 蒙特卡洛法 解 非线性整数规划问题

    简介

    假设目标函数落在高值区的概率分别为0.01,0.00001,则当计算(10^6)个点之后至少有一个点能落在高值区的概率分别是

    [1 - 0.99^{1000000} = 0.9999999(100+)99 ]

    [1 - 0.99999^{1000000} = 0.999954602 ]


    上面就是蒙特卡洛解整数规划的重点。如果不是整数那几乎不能枚举。

    code

    rand('state', sum(clock)); % 初始化随机数发生器
    p0 = 0;
    tic % 计时开始
    for i=1:10^6
        x = randi([0,99],1,5); % 产生一行五列的区间[0,99]上的随机整数
        [f,g] = mente(x);
        if all(g <= 0)
            if p0 < f
                x0=x;p0 = f; %记录下当前较好的值
            end
        end
    end
    disp('最优位置 & 最优值')
    x0, p0
    toc % 计时结束
    
    function[f,g] = mente(x);
    f=x(1)^2 + x(2)^2 + 3 * x(3)^2 + 4 * x(4)^2 + 2*x(5)^2-8*x(1) - 2* x(2) - 3*x(3) -x(4) - 2 * x(5); % 求f 的最大值 同时 g 中所有元素要满足小于0
    g = [
    sum(x) - 400
    x(1) + 2 * x(2) + 2 * x(3) + x(4) + 6 * x(5) - 800
    2 * x(1) + x(2) + 6 * x(3) - 200
    x(3) + x(4) + 5 * x(5) - 200
    ];
    
    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    study os
    open source [license]
    work serises------------patch
    interest in history-----------先秦
    python学习-----------argparse
    problems fixed
    work serises------------adb 使用
    零碎积累之--------------java环境相关
    Hash Table Five Finish
    Hash Table Four
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/13440605.html
Copyright © 2011-2022 走看看