function [F, G] = fun(X0,NLP,GRAD,y0,n,fx)
%Função auxiliar para a utilização do MINLP com restrições de igualdade
%
%  usage: [F] = FUN(X0,NLP,Y0,N)
%
%  F  : valor da função objetivo
%  X0 : vetor das variáveis (length(X0)==N para problema não relaxado e
%       length(X0)==N+M para o problema relaxado.
%  NLP: arquivo como descrito em MINLP
%  Y0 : vetor das variáveis binárias
%  N  : número de variáveis contínuas no problema

% autor:   Rafael de Pelegini Soares
%          Departamento de Engenharia Química
%          Universidade Federal do Rio Grande do Sul, Brasil
%          rafael@enq.ufrgs.br
%
%			  30/set/2001

if nargin < 6
   fx=[];
end

fx = sort(fx);

if n==length(X0) %não relaxado
   [F, G] = eval([NLP '(X0,y0)']);
   return;
else %problema relaxado em algumas ou todas as variáveis binárias
   index = 1:length(y0);
   index(fx-n) = []; %removendo os fixos
   y = y0;
   y(index) = X0(n+1:end);
end

x = X0(1:n); % x é sempre as n primeiras variáveis

[F, G] = eval([NLP '(x,y)']); %problema relaxado