机会约束规划技术研究(Matlab代码实现)

    目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

机会约束规划(Chance Constrained Programming)是指约束条件中含有随机变量,且必须在预测到随机变量的实现之前作出决策的情况下;而且还要考 虑到所作决策在不利情况发生时可能不满足约束条件,这时要采用

一种原则,即允许所作决策在一定程度上不满足约束条件,但该决策应使约束条件成立的概率不小于某一置信水平。

随机规划的三个分支是期望值模型、机会约束规划和相关机会规划。其中机会约束规划是由查纳斯(A.Charnes)和库伯(W.W.Cooper)于1959年提出的,是在一定的概率意义下达到最优的理论。它是一种随机规划方法,针对约束条件中含有随机变量,并且必须在观测到随机变量的实现之前做出决策的问题。

机会约束规划考虑到所做决策在不利的情况发生时可能不满足约束条件,而采用一种原则:即允许所做决策在一定程度上不满足约束条件,但该决策使约束条件成立的概率不小于某一个足够小的置信水平。对一些特殊情况,机会约束规划问题可以转化为等价的确定性数学规划问题,但对于较复杂的机会约束规划问题,则要利用基于随机模拟的遗传算法来求解一般机会约束规划问题以及机会约束多目标规划和机会约束目标规划问题。

机会约束规划的解法大致有两种。其一,将机会约束规划转化为确定性规划,然后用确定性规划的理论去解决;其二,通过随机模拟技术处理机会约束条件,并利用遗传算法的优胜劣汰,得到机会约束规划的目标函数最优值和决策变量最优解集。

机会约束规划的目标函数最优值及决策变量的最优解集与模型中的随机系数有关,因而具有随机性。从数理统计的角度看,对这种随机的目标函数最优值以及决策变量的最优解集可以作出某种置信水平的区间估计。衡量区间估计的精度的一个重要指标是估计区间的长度,估计区间长度越小,估计精度就越大;反之,估计区间长度越大,估计精度就越小。​

📚2 运行结果

主函数部分代码:

close all;
clear;
clc;
​
% Read from file
filename = 'problems/problem1.txt';
[n, m, k, cm, cs, Am, bm, As, bs, p] = read_from_file(filename);
% n = number of x_i
% m = number of constraints
lb = zeros(n, 1);
x0 = zeros(n, 1);
​
% Do analysis
prange = 0.1:0.01:0.99;
PR = length(prange);
% Check sensitivity to all P
xv = zeros(length(prange), n);
obj = zeros(length(prange), 1);
options = optimoptions('fmincon', 'Display', 'off');
for i = 1:length(prange),
    p(1) = prange(i);
    p(2) = prange(i);    
    p(3) = prange(i);
    fprintf('Solving for p3 = %f\n', prange(i));
    [x, fval] = fmincon(@(x)get_objective(x, cm, cs, k), x0, [], [], [], [], lb, [], @(x)get_constraints(x, m, Am, As, bm, bs, p), options);
    xv(i, :) = x + 0;
    obj(i, :) = fval;
end
​
% Check sensitivity to P2 and P3
prange = 0.1:0.01:0.99;
[ppx, ppy] = meshgrid(prange, prange);
PR = length(prange);
%
p(1) = 0.9;
objP2P3 = zeros(PR, PR);
for i = 1:PR,
    for j = 1:PR,
        p(2) = prange(i);
        p(3) = prange(j);
        fprintf('Solving for p1 = %f, p2 = %f\n', prange(i), prange(j));    
        [x, fval] = fmincon(@(x)get_objective(x, cm, cs, k), x0, [], [], [], [], lb, [], @(x)get_constraints(x, m, Am, As, bm, bs, p), options);
        objP2P3(i, j) = fval;
    end
end
​
% Check sensitivity to P1 and P3
prange = 0.1:0.01:0.99;
[ppx, ppy] = meshgrid(prange, prange);
PR = length(prange);
%
p(2) = 0.9;
objP1P3 = zeros(PR, PR);
for i = 1:PR,
    for j = 1:PR,
        p(1) = prange(i);
        p(3) = prange(j);
        fprintf('Solving for p1 = %f, p2 = %f\n', prange(i), prange(j));    
        [x, fval] = fmincon(@(x)get_objective(x, cm, cs, k), x0, [], [], [], [], lb, [], @(x)get_constraints(x, m, Am, As, bm, bs, p), options);
        objP1P3(i, j) = fval;
    end
end
​
​
%% Check sensitivity to variances of x1
p = p*0 + 0.9;
scales = 0:0.5:20;
S = length(scales);
objscale = zeros(S, S);
% x1, x2 stores
x_var = zeros(S, S, 2);
% Run for some scales
for i = 1:length(scales),
    for j = 1:length(scales),
        As_tmp = As;
        As_tmp(:, 1) = As(:, 1)*scales(i);
        As_tmp(:, 2) = As(:, 2)*scales(j);
        [x, fval] = fmincon(@(x)get_objective(x, cm, cs, k), x0, [], [], [], [], lb, [], @(x)get_constraints(x, m, Am, As_tmp, bm, bs, p), options);
        objscale(i, j) = fval;
        x_var(i, j, :) = x;
    end
end

🎉3 参考文献

[1]麻倩倩. 一类随机机会约束规划的算法及应用研究[D].华北电力大学(河北),2007.

部分理论引用网络文献,若有侵权联系博主删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值