我想变量的意义你应该很清楚了 c表示第j料厂向第i个工地运输的量 @free是取消变量的非负限制 也就是说改建料厂的地点可以是负坐标的 init是给计算赋初值 计算会从给的初值处开始迭代 如果初值和最优解相差不大会提高计算效率
下面的目标函数是对运量和距离的积求和最小
@for(demand(i):@sum(supply(j):c(i,j))=d(i););
对每个工地 各个料厂向这个工地的运量的和等于需求
@for(supply(i):@sum(demand(j):c(j,i))<=e(i););
对每个料厂 向各个工地运量的和小于存量
最后一句说过了
1. 求解模型(Slove):Ctrl+S
2. 求解结果(Solution):Ctrl+O
3. 查看(Look):Ctrl+L
4. 灵敏性分析(Range,Ctrl+R):为了激活灵敏性分析,运行 LINGO|Options,选择 General Solver Tab, 在 Dual Computations 列表框中,选择 Prices and Ranges 选项。
max=60desks+30tables+20chairs;
8desks+6tables+chairs<=48;
4desks+2tables+15chairs<=20;
2desks+15tables+5chairs<=8;
tables<=5;
求解这个模型,并激活灵敏性分析。这时,查看报告窗口(Reports Window),可以看到结果。
“Global optimal solution found at iteration: 3”表示 3 次迭代后得到全局最优解。
“Objective value:2800000”表示最优目标值为 280。 “Value”给出最优解中各变量的值:2 个书桌(desks), 0 个餐桌(tables), 8 个椅子(chairs)。所以 desks、chairs 是基变量(非 0),tables 是非基变量(0)。
“Slack or Surplus”给出松驰变量的值:
第 1 行松驰变量 =280(模型第一行表示目标函数,所以第二行对应第一个约束)
第 2 行松驰变量 =24
第 3 行松驰变量 =0
第 4 行松驰变量 =0
第 5 行松驰变量 =5
“Reduced Cost”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。其中基变量的reduced cost值应为 0, 对于非基变量 Xj, 相应的 reduced cost值表示当某个变量Xj 增加一个单位时目标函数减少的量( max型问题)。
本例中:变量tables对应的reduced cost值为 5,表示当非基变量tables的值从 0 变为 1 时(此时假定其他非基变量保持不变,但为了满足约束条件,基变量显然会发生变化),最优的目标函数值 = 280 - 5 = 275。
“DUAL PRICE”(对偶价格)表示当对应约束有微小变动时, 目标函数的变化率。输出结果中对应于每一个约束有一个对偶价格。 若其数值为 p, 表示对应约束中不等式右端项若增加 1 个单位,目标函数将增加 p 个单位(max 型问题)。显然,如果在最优解处约束正好取等号(也就是“紧约束”,也称为有效约束或起作用约束),对偶价格值才可能不是0。
本例中:第 3、4 行是紧约束,对应的对偶价格值为 10,表示当紧约束
3) 4 DESKS + 2 TABLES + 15 CHAIRS <= 20 变为 3) 4 DESKS + 2 TABLES + 15 CHAIRS <= 21时,目标函数值 = 280 +10 = 290。对第 4 行也类似。
对于非紧约束(如本例中第 2、5 行是非紧约束),DUAL PRICE 的值为 0, 表示对应约束中不等式右端项的微小扰动不影响目标函数。有时, 通过分析 DUAL PRICE, 也可对产生不可行问题的原因有所了解。
灵敏度分析的结果是
目标函数中 DESKS 变量原来的费用系数为 60,允许增加(Allowable Increase)=4、允许减少(Allowable Decrease)=2,说明当它在[60-4,60+20] = [56,80]范围变化时,最优基保持不变。对 TABLES、CHAIRS 变量,可以类似解释。由于此时约束没有变化(只是目标函数中某个费用系数发生变化),所以最优基保持不变的意思也就是最优解不变(当然,由于目标函数中费用系数发生了变化,所以最优值会变化)。
第 2 行约束中右端项(Right Hand Side,简写为 RHS)原来为 48,当它在[48-24,48+∞]= [24,∞]范围变化时,最优基保持不变。第 3、4、5 行可以类似解释。不过由于此时约束发生变化,最优基即使不变,最优解、最优值也会发生变化。
5. 模型通常形式(Generate):Ctrl+G
6. 选项(Options):Ctrl+I (28页—35页)
(1)Interface(界面)选项卡
(2)General Solver(通用求解器)选项卡
(3)Linear Solver(线性求解器)选项卡
(4)Nonlinear Solver(非线性求解器)选项卡
(5)Integer Pre-Solver(整数预处理求解器)选项卡
(6)Integer Solver(整数求解器)选项卡
(7)Global Solver(全局最优求解器)选项卡
优势:简单的模型表示。方便的数据输入和输出选择。强大的求解器。交互式模型或创建Turn-key应用程序。其特色在于内置建模语言,提供十几个内部函数,可以允许决策变量是整数。
在各个领域本书都配有丰富的案例和求解程序,帮助读者深入理解LINGO软件。同时,本书专门配有一章介绍数学建模中的应用实例,以10个数学建模经典案例为基础,其中9个案例的全部模型都用LINGO编程实现,并在LINGO12版本调试通过。这些案例凝聚了作者多年来积累的编程经验和巧妙构思。
本书在深入浅出地介绍LINGO基本用法和LINGO与外部文件接口的基础上,分两个层次介绍了LINGO软件及其应用:
第一个层次以数学规划、图论与网络优化、多目标规划等LINGO软件常用领域为背景,介绍LINGO软件求解优化模型的常规手段和技巧。
第二个层次以博弈论、存储论、排队论、决策分析、评价方法、最小二乘法等领域为背景,介绍LINGO软件在非优化领域的应用,充分展示LINGO软件的优势和应用扩展。
你要雅各比还是高斯赛德尔消元法?
这是我做数值计算实验高斯消元法的程序 你可以改改 (这个从报告上粘贴的 可能文本有问题 错了再找我)
function x=Guss(A,b)
A=[A,b];
[m,n]=size(A);
for k=1:m
c=A(k:m,k);
c=abs(c);
d=max(c);
e=find(c==d);
e=e+k-1;
l=A(k,:);
A(k,:)=A(e,:);
A(e,:)=l;
A
for z=k+1:m
A(z,k:n)=A(z,k:n)-A(k,k:n)A(z,k)/A(k,k);
end
end
A
x=zeros(m,1);
x(m)=A(m,n)/A(m,m)
for i=m-1:-1:1
x(i)=(A(i,n)-sum(A(i,1:m)x'))/A(i,i);
end
x
下面调用Guss(你自己调用你的矩阵,我只是举例说明下怎么调用)
A=[0101 2304 3555;
-1347 3712 4623;
-2835 1072 5643];
b=[1183 2137 3035]';
X=Guss(A,b)
x=A\b
以上就是关于lingo程序疑问全部的内容,包括:lingo程序疑问、LINGO 菜单、如何使用LINGO软件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)