gusucode.com > 《matlab在数学建模中的应用》一书 所有的 源代码 > 第10章/P10-1/nonlcon.m

    function [c,ceq]=nonlcon(rx,type,p_test,a_lb,b_ub)
% type代表当前求解的彩票类型
% p_test是当前各奖项概率(当前彩票类型,当前m、n)
% a_lb,b_ub是相邻两个奖项奖金之比的下限和上限

if (type == 1)
	% 这是K1型的
	c(1)= 6e5- ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(1)./p_test(1);
	c(2)=-5e6+ ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(1)./p_test(1);
	c(3)= a_lb(1).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(2)./p_test(2)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(1)./p_test(1);
	c(4)= a_lb(2).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(3)./p_test(3)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(2)./p_test(2);
		
	c(5)= a_lb(3).* rx(4)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(3)./p_test(3);

	c(6)=-b_ub(1).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(2)./p_test(2)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(1)./p_test(1);
		
	c(7)=-b_ub(2).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(3)./p_test(3)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(2)./p_test(2);
		
	c(8)=-b_ub(3).* rx(4)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)).*rx(3)./p_test(3);
			
	ceq=[];
elseif (type == 2) || (type == 3)
	% 这是K2和K3的(K2、K3可合并处理,因奖项数目一样)
	c(1)= 6e5- ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(1)./p_test(1);
	c(2)=-5e6+ ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(1)./p_test(1);
	c(3)= a_lb(1).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(2)./p_test(2)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(1)./p_test(1);
	c(4)= a_lb(2).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(3)./p_test(3)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(2)./p_test(2);
		
	c(5)= a_lb(3).* rx(4)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(3)./p_test(3);

	c(6)=-b_ub(1).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(2)./p_test(2)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(1)./p_test(1);
		
	c(7)=-b_ub(2).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(3)./p_test(3)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(2)./p_test(2);
		
	c(8)=-b_ub(3).* rx(4)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)-...
				p_test(6).*rx(6)-p_test(7).*rx(7)).*rx(3)./p_test(3);
	if (rx(7) == 0)
		c(9) = -1;
		c(10)= -1;
	else
		c(9) = a_lb(6) .* rx(7) - rx(6);
		c(10)=-b_ub(6) .* rx(7) + rx(6);
	end
	ceq=[];
elseif (type == 4)
	% K4型
	c(1)= 6e5- ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(1)./p_test(1);
	c(2)=-5e6+ ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(1)./p_test(1);
	c(3)= a_lb(1).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(2)./p_test(2)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(1)./p_test(1);
	c(4)= a_lb(2).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(3)./p_test(3)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(2)./p_test(2);
		
	c(5)= a_lb(3) .*rx(4)-...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(3)./p_test(3);

	c(6)=-b_ub(1).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(2)./p_test(2)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(1)./p_test(1);
		
	c(7)=-b_ub(2).* ...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(3)./p_test(3)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(2)./p_test(2);
		
	c(8)=-b_ub(3) .* rx(4)+...
			 (1-p_test(4).*rx(4)-p_test(5).*rx(5)).*rx(3)./p_test(3);
	ceq=[];
else
	error('Error in function nonlcon!')
end