MATLAB Answers

Which is the best optimization method for optimizing over probability mass functions?

6 views (last 30 days)
H. Paul  Keeler
H. Paul Keeler on 3 Oct 2019
Edited: H. Paul Keeler on 4 Oct 2019
I have a nonlinear scalar function f of a n-dimensional variable/vector p, where p is a probability mass function (PMF) for a (discrete) random variable with finite support. This means that the entries of the vector p are probabilities that sum to one, so and for .
What's the best MATLAB optimization method for finding the minimum of f? I have been using fmincon,but I thought perhaps there's a better method.
Here's my code for a random toy nonliner function f (which is the function funOpt in the code):
%Optimization problem for a probability mass function (PMF)
numbPMF=3; %number probability mass function (PMF) values
rng(1); %set random seed for reproducibility
p0=rand(1,numbPMF);p0=p0/sum(p0); %create a random PMF
funOpt=@(p)(sum((p-p0).^2+(p-p0).^3)); %example of a nonlinear function
pmf0=zeros(1,numbPMF); %initial guess of PMF
probTotal=1; %total probability (default is one)
%%%START Optimization parameters START%%%
%For details, see
lb = zeros(1,numbPMF); %lower bounds for probabilities
ub = ones(1,numbPMF); %upper bounds for probabilities
nonlcon = @(x)funSumProb(x,probTotal); %nonlinear constraint; see below
%leave all the other optimization parameters void
A = []; %linear equality contraint ie A*x = b
b = []; %linear contraint ie A*x =b
Aeq = []; %linear inequality contraint ie A*x <= b
beq = []; %linear inequality contraint ie A*x <= b
%%%END Optimization parameters END%%%
%define function for nonlinear constraint
%contraint is the probabilities summing to one
function [c,ceq] = funSumProb(x,totalSum)
ceq= (sum(x)-totalSum); %sums to one
c = [];
Thanks in advance.


Sign in to comment.

Accepted Answer

Matt J
Matt J on 3 Oct 2019
Edited: Matt J on 3 Oct 2019
fmincon is most appropriate because your objective is non-linear and non-quadratic. However, your constraints are all linear, so you shouldn't be using nonlcon:
Aeq = ones(1,numbPMF);

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!