0
点赞
收藏
分享

微信扫一扫

【数学建模】【matlab & lingo】模糊规划和非线性规划

杏花疏影1 2022-03-12 阅读 134
python
因为敲符号实在是太麻烦了,所以我把约束条件写在了注释里面。

问题一

在这里插入图片描述

普通线性规划

! 2022/03/09;
! 略小()于 范围均限制在 2;
! 需要原料 约为 范围限制在 正负2;
! 原料总数 约为 范围限制在 正负200;

model:
title NJUCM第三次作业;

sets:
Medicine/1..2/:Profits_medicine, Number_production;
Material/1..2/:Total_material;
link(Medicine, Material):Consuption;
endsets

data:
Profits_medicine = 3 4;
Total_material = 4600 4800;
Consuption = 
4 12
20 6.4;
enddata

max = @sum(Medicine(i) : Number_production(i) * Profits_medicine(i));

@for(Material(j) :
	@sum(Medicine(i) : Number_production(i) * Consuption(i, j)) < Total_material(j));

end

带有伸缩指标的线性规划

!   2022/03/09
!   略小()于 范围均限制在 2;
! 需要原料 约为 范围限制在 正负2;
! 原料总数 约为 范围限制在 正负200;

model:
title NJUCM第三次作业;

sets:
Medicine/1..2/:Profits_medicine, Number_production;
Material/1..2/:Total_material;
link(Medicine, Material):Consuption;
endsets

data:
Profits_medicine = 3 4;
Total_material = 4600 4800;
enddata

max = @sum(Medicine(i) : Number_production(i) * Profits_medicine(i));

2 < Consuption(1, 1);
Consuption(1, 1) < 4;
20 < Consuption(2, 1);
Consuption(2, 1) < 22;
10 < Consuption(1, 2);
Consuption(1, 2)  < 14;
4.4 < Consuption(2, 2);
Consuption(2, 2) < 8.4;
Consuption(1, 1) * Number_production(1) + Consuption(2, 1) * Number_production(2) < 4800;
Consuption(1, 1) * Number_production(1) + Consuption(2, 1) * Number_production(2) > 4400;
Consuption(1, 2) * Number_production(1) + Consuption(2, 2) * Number_production(2) < 5000;
Consuption(1, 2) * Number_production(1) + Consuption(2, 2) * Number_production(2) > 4600;

end

模糊线性规划

这个emmmm让我想一想,思路有点乱的赶脚。等明天另外写一篇文章

问题二

在这里插入图片描述

model:
title NJUCM第三次作业;

sets:
! Demand_number : 每种产品需求的数量;
! Demand_length : 每种产品需求的长度;
! Cutting_price : 每种切割方式的价格(按照降序排列);
Demand/1..4/:Demand_number, Demand_length, Cutting_price;
! Material_consuption_number : 按照一种切割方式切割的原料数量;
Material/1..4/:Material_consuption_number;
! Cutting_pattern(i, j) : 切割模式,按照第 i 种切割方式获得第 j 种产品的数量;
link(Material, Demand):Cutting_pattern;
endsets

data:
Material_length = 1850;
Material_price = 1;
Demand_number = 15 28 21 30;
Demand_length = 290 315 350 455;
Cutting_price = 1.1 1.2 1.3 1.4;
Max_number = 5;
Max_remain_material = 100;
enddata

min = @sum(Material(i) : Material_consuption_number(i) * Cutting_price(i));

! 每种产品数量 > 需求数量;
@for(Demand(j) :
	@sum(Material(i) :
		Cutting_pattern(i, j) * Material_consuption_number(i)) > Demand_number(j));

! 每种原料 > 原长 - 100;
@for(Material(i) :
	@sum(Demand(j) :
		Cutting_pattern(i, j) * Demand_length(j)) > Material_length - Max_remain_material);

! 每种切割方式获得长度 < 原料长度;
@for(Material(i) :
	@sum(Demand(j) :
		Cutting_pattern(i, j) * Demand_length(j)) < Material_length);

! 每根原料获得的产品数量 < 5;
@for(Material(i) :
	@sum(Demand(j) :
		Cutting_pattern(i, j)) < Max_number);

! 限制在整数;
@for(link(i, j) : @gin(Cutting_pattern(i, j)));

@for(Material(i) : @gin(Material_consuption_number(i)));

! 按照降序排列;
@for(Material(i)|i#lt#@size(Material) :
	Material_consuption_number(i) > Material_consuption_number(i + 1));

end
举报

相关推荐

0 条评论