当前位置:文档之家› c#调用lingo

c#调用lingo

c#调用lingo
c#调用lingo

C#调用lingo

第一个cs文件

using System;

using System.Text;

using System.Runtime.InteropServices;

public class lingo

{

/********************************************************************* * Macro Definitions *

*********************************************************************/

public static int LSERR_NO_ERROR_LNG = 0;

public static int LSERR_OUT_OF_MEMORY_LNG = 1;

public static int LSERR_UNABLE_TO_OPEN_LOG_FILE_LNG = 2;

public static int LSERR_INVALID_NULL_POINTER_LNG = 3;

public static int LSERR_INVALID_INPUT_LNG = 4;

public static int LSERR_INFO_NOT_AVAILABLE_LNG = 5;

public static int LS_IINFO_VARIABLES_LNG = 0;

public static int LS_IINFO_VARIABLES_INTEGER_LNG = 1;

public static int LS_IINFO_VARIABLES_NONLINEAR_LNG = 2;

public static int LS_IINFO_CONSTRAINTS_LNG = 3;

public static int LS_IINFO_CONSTRAINTS_NONLINEAR_LNG = 4;

public static int LS_IINFO_NONZEROS_LNG = 5;

public static int LS_IINFO_NONZEROS_NONLINEAR_LNG = 6;

public static int LS_IINFO_ITERATIONS_LNG = 7;

public static int LS_IINFO_BRANCHES_LNG = 8;

public static int LS_DINFO_SUMINF_LNG = 9;

public static int LS_DINFO_OBJECTIVE_LNG =10;

public static int LS_DINFO_MIP_BOUND_LNG =11;

public static int LS_DINFO_MIP_BEST_OBJECTIVE_LNG =12;

public static int LS_STATUS_GLOBAL_LNG = 0;

public static int LS_STATUS_INFEASIBLE_LNG = 1;

public static int LS_STATUS_UNBOUNDED_LNG = 2;

public static int LS_STATUS_UNDETERMINED_LNG = 3;

public static int LS_STATUS_INFORUNB_LNG = 5;

public static int LS_STATUS_LOCAL_LNG = 6;

public static int LS_STATUS_LOCAL_INFEASIBLE_LNG = 7;

public static int LS_STATUS_CUTOFF_LNG = 8;

public static int LS_STATUS_NUMERIC_ERROR_LNG = 9;

/********************************************************************* * * * Function Prototypes * * * *********************************************************************/

[ DllImport( "lingd90.dll", EntryPoint = "LSclearPointersLng")] public static extern int LSclearPointersLng( int pLingoEnv);

[ DllImport( "lingd90.dll", EntryPoint = "LScloseLogFileLng")] public static extern int LScloseLogFileLng( int pLingoEnv);

[ DllImport( "lingd90.dll", EntryPoint = "LScreateEnvLng")] public static extern int LScreateEnvLng( );

[ DllImport( "lingd90.dll", EntryPoint = "LSdeleteEnvLng")] public static extern int LSdeleteEnvLng( int pLingoEnv);

[ DllImport( "lingd90.dll", EntryPoint = "LSexecuteScriptLng")] public static extern int LSexecuteScriptLng( int pLingoEnv, string pcScript);

[ DllImport( "lingd90.dll", EntryPoint = "LSgetCallbackInfoLng")] public static extern int LSgetCallbackInfoLng( int pLingoEnv, int nObject, ref int pnResult);

[ DllImport( "lingd90.dll", EntryPoint = "LSopenLogFileLng")] public static extern int LSopenLogFileLng( int pLingoEnv, string pcLogFile);

[ DllImport( "lingd90.dll", EntryPoint = "LSsetCallbackSolverLng")] public static extern int LSsetCallbackSolverLng( int pLingoEnv, lingo.typCallback pSolverCallbackFunction,

[MarshalAs(UnmanagedType.AsAny)] object pMyData);

[ DllImport( "lingd90.dll", EntryPoint = "LSsetPointerLng")] public static extern int LSsetPointerLng( int pLingoEnv,

ref double pdPointer, ref int pnPointersNow);

public delegate int typCallback( int pLingoEnv, int nReserved,

IntPtr pUserData);

}

第二个cs文件----程序入口

using System;

using System.Text;

using System.IO;

using System.Runtime.InteropServices;

using System.Runtime.Remoting;

namespace Simple

{

[StructLayout( LayoutKind.Sequential)]

public class CallbackData

{

public int nIterations;

// Constructor:

public CallbackData()

{

nIterations = 0;

}

}

class Class1

{

/// Illustrates calling the Lingo DLL from C#.NET to

/// solve the simple product mix model:

/// Max 100 Standard + 150 Turbo;

/// S.T.

///(X)Standard <= 100

/// (Y)Turbo <= 120

/// Standard + 2 * Turbo < 160;

///

/// Note: The model template file, \lingo9\samples\simple.lng,

/// must be present in order to run this example.

///

[STAThread]

static void Main(string[] args)

{

int pLingoEnv;

int nError=-1, nPointersNow=-1;

double dObjective=-1, dStatus=-1;

// Get a pointer to a Lingo environment

pLingoEnv = lingo.LScreateEnvLng();

if ( pLingoEnv == 0)

{

Console.WriteLine( "Unable to create Lingo environment.\n");

goto FinalExit;

}

// Open LINGO's log file

nError = lingo.LSopenLogFileLng( pLingoEnv, "lingo.log");

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// Let Lingo know we have a callback function

CallbackData cbd = new CallbackData();

lingo.typCallback cb = new lingo.typCallback( LngCallback.MyCallback);

//回调函数

nError = lingo.LSsetCallbackSolverLng( pLingoEnv, cb, cbd);

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// must pin lingo's transfer areas in memory

unsafe {

fixed(

// Model data that gets referenced by the

// template model, simple.lng

double* dProfit = new double [2],

dLimit = new double [2],

dLabor = new double [2],

dProduce = new double [2])

{

dProfit[0] = 100; dProfit[1] = 150;//对应两种设备的单价

dLimit[0] = 100; dLimit[1] = 120; //两种设备数量限制

dLabor[0] = 1; dLabor[1] = 2; //两种设备的工时

// Pass Lingo the pointer to the objective coefficients (refer

// to the template model, simple.lng)

nError = lingo.LSsetPointerLng( pLingoEnv, ref dProfit[0], ref nPointersNow);

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// Pass a pointer to the production limits

nError = lingo.LSsetPointerLng( pLingoEnv, ref dLimit[0], ref nPointersNow);

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// Pointer to the labor utilization coefficients

nError = lingo.LSsetPointerLng( pLingoEnv, ref dLabor[0], ref nPointersNow);

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// Point to dObjective, where Lingo will return the objective value

nError = lingo.LSsetPointerLng( pLingoEnv, ref dObjective, ref nPointersNow);

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// Pointer to the solution status code

nError = lingo.LSsetPointerLng( pLingoEnv, ref dStatus, ref nPointersNow);

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// Point to the variable value array

nError = lingo.LSsetPointerLng( pLingoEnv, ref dProduce[0], ref nPointersNow);

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// Here is the script we want LINGO to run.

string cScript =

"set echoin 1 \n take \\lingo9\\samples\\simple.lng \n go \n quit \n";

// Run the script

nError = lingo.LSexecuteScriptLng( pLingoEnv, cScript);

if ( nError != lingo.LSERR_NO_ERROR_LNG) goto ErrorExit;

// Close the log file

lingo.LScloseLogFileLng( pLingoEnv);

// Any problems?

if ( nError != 0 ||

dStatus != lingo.LS_STATUS_GLOBAL_LNG)

{

// Had a problem

Console.WriteLine( "Unable to solve!");

}

else

{

// Everything went OK ... print results

Console.WriteLine(

"\nStandards: {0} \nTurbos: {1} \n\nProfit: {2} \n",

dProduce[0], dProduce[1], dObjective);

}

}}

goto NormalExit;

ErrorExit:

Console.WriteLine( "LINGO Error Code: {0}\n", nError);

NormalExit:

// Free Lingo's envvironment to avoid a memory leak

lingo.LSdeleteEnvLng( pLingoEnv);

FinalExit:

Console.WriteLine("press enter...");

String sTemp = Console.ReadLine();

}

}

public class LngCallback

{

public LngCallback()

{

}

public static int MyCallback( int pLingoEnv, int nReserved, IntPtr pMyData) {

// Lingo callback function to display the current iteration count

CallbackData cb = new CallbackData();

Marshal.PtrToStructure( pMyData, cb);

int nIterations=-1, nErr;

//回调函数

nErr = lingo.LSgetCallbackInfoLng( pLingoEnv,

lingo.LS_IINFO_ITERATIONS_LNG, ref nIterations);//

LS_IINFO_VARIABLES_NONLINEAR_LNG LS_IINFO_ITERATIONS_LNG

if ( nErr == lingo.LSERR_NO_ERROR_LNG && nIterations != cb.nIterations)

{

cb.nIterations = nIterations;

Console.WriteLine("Iteration count={0}", nIterations); }

Marshal.StructureToPtr( cb, pMyData, true);

return 0;

}

}

}

lingo实验报告材料

一、实验名称:推销员指派问题 二、实验目的及任务: 1、掌握Lingo 软件的使用方法 2、编写简单的Lingo 程序 3、解决Lingo 中的最优指派问题 三、实验容 1、问题描述 一个公司要分派5个推销员去5个地区推销某种产品,5个推销员在各个地区推销这种产品的预期利润如下表所示。若每个推销员只能去一个地区。应如何分派这5个推销员才能使公司的利润为最大? 2、模型建立 决策变量:设???=个地区个人去第不指派第个地区个人去第指派第j i 0j i 1ij x (i,j=1,2,3,4,5) 目标函数:设总利润为z ,第i 个人去第j 个地区的利润为A ij (i,j=1,2,3,4,5) ,假设A ij 为指派矩阵,则 Max ∑∑===5 15 1i j ij ij x A z 约束条件: 1.第j 个地区只有一个人去: 15 1 =∑=i ij x (j=1,2,3,4,5) 2.第i 个人只去一个地区: 15 1 =∑=j ij x (i=1,2,3,4,5) 由此得基本模型:

Max ∑∑===515 1 i j ij ij x A z S,t, 15 1 =∑=i ij x (j=1,2,3,4,5) 15 1 =∑=j ij x (i=1,2,3,4,5) 10或=ij x (i,j=1,2,3,4,5) 3、Lingo 程序 (一)常规程序 Lingo 输入: model : max =1*x11+8*x12+9*x13+2*x14+1*x15+5*x21+6*x22+3*x23+10*x24+7*x25+3*x31+10*x32+4*x33+11*x34+3*x35+7*x41+7*x42+5*x43+4*x44+8*x45+4*x51+2*x52+6*x53+3*x54+9*x 55; x11+x12+x13+x14+x15=1; x21+x22+x23+x24+x25=1; x31+x32+x33+x34+x35=1; x41+x42+x43+x44+x45=1; x51+x52+x53+x54+x55=1; x11+x21+x31+x41+x51=1; x12+x22+x32+x42+x52=1; x13+x23+x33+x43+x53=1; x14+x24+x34+x44+x54=1; x15+x25+x35+x45+x55=1; end Lingo 输出: Global optimal solution found. Objective value: 45.00000 Infeasibilities: 0.000000 Total solver iterations: 8 Variable Value Reduced Cost

LINGO软件简介

LINGO 软件简介 LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整 数规划等问题。 一个简单示例 有如下一个混合非线性规划问题: ?????≥≤≤+++---+为整数 213 212 13213 2 2212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x 。 LINGO 程序(模型): max =98*x1+277*x2-x1^*x1*x2-2*x2^2+150*x3; x1+2*x2+2*x3<=100; x1<=2*x2; @gin (x1);@gin (x2);! Lingo 默认变量非负 (注意:@bin(x)表示x 是0-1变量;@gin(x)表示x 是整数变量;@bnd(L,x,U)表示 限制LxU ;@free(x)表示取消对x 的符号限制,即可正、可负。) 结果: Global optimal solution found. Objective value: Extended solver steps: 0 Total solver iterations: 45 Variable Value Reduced Cost X1 X2 X3 Row Slack or Surplus Dual Price 1 2 3 ———————— 非常简单! 在LINGO 中使用集合 为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。 例如:对?? ? ??? ? ==-++-==≤++∑=.,,;10)0(;4,3,2,1),()())()1()(;4,3,2,1,20)(..)} (20)(450)(400{min 4 ,3,2,1均非负INV OP RP INV I I DEM I OP I RP I INV I INV I I RP t s I INV I OP I RP I 求解程序: model : sets : mark/1,2,3,4/:dem,rp,op,inv;!也可以vmark/1..4/:dem,rp,op,inv;

lingo实验心得体会[工作范文]

lingo实验心得体会 篇一:LINGO软件学习入门实验报告 LINGO实验报告 一.实验目的 1、熟悉LINGO软件的使用方法、功能; 2、学会用LINGO软件求解一般的线性规划问题。 二.实验内容 1、求解线性规划: max z?x1?2x2 ?2x1?5x2?12 ??x1?2x2?8 ?x,x?0?12 2、求解线性规划: min z?20x1?10x2 ?5x1?4x2?24 ??2x1?5x2?5 ?x,x?0?12 3、假设现在一个计算机厂商要生产两种型号的PC:标准型和增强型,由于生产线和劳动力工作时间的约束,使得标准型PC最多生产100台。增强型PC最多生产120台;一共耗时劳动力时间不能超过160小时。已知每台标准型PC 可获利润$100,耗掉1小时劳动力工作时间;每台增强型PC 可获利润$150,耗掉2小时劳动力工作时间。请问:该如何

规划这两种计算机的生产量才能够使得最后获利最大? 三. 模型建立 1、求解线性规划: max z?x1?2x2 ?2x1?5x2?12 ??x 1?2x2?8 ??x1,x2?0 2、求解线性规划: min z?20x1?10x2 ?5x1?4x2?24 ?2x ?1?5x2?5 ?x1,x2?0 3、设生产标准型为x1台;生产增强型x2台,则可建立线性规划问题 数学模型为 max z?100x1?150x2 ??x1?100 ?x?120 ?2 ?x1?2x2?160

??x1,x2?0 四. 模型求解(含经调试后正确的源程序) 1、求解线性规划: model: max=x1+2*x2; 2*x1+5*x2>12; x1+2*x25; End 结果显示: 3、求解线性规划: model: mAX=100*x1+150*x2; x1+2*x2篇二:lingo上机实验报告 重庆交通大学 学生实验报告 实验课程名称专业综合实验Ⅰ 开课实验室交通运输工程实验教学中心 学院交通运输年级二年级专业班交通运输1班学生姓名学号631205020 开课时间20XX 至 20XX 学年第2学期 篇三:运筹学上机实践报告Southwestuniversityofscienceandtechnology

LINGO软件简介

LINGO 软件简介 LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整数规划等问题。 一个简单示例 有如下一个混合非线性规划问题: ?????≥≤≤+++---+为整数 213 212 13213 2 2212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x 。 LINGO 程序(模型): max =98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2+150*x3; x1+2*x2+2*x3<=100; x1<=2*x2; @gin (x1);@gin (x2);! Lingo 默认变量非负 (注意:@bin(x)表示x 是0-1变量;@gin(x)表示x 是整数变量;@bnd(L,x,U)表示 限制L ≤x ≤U ;@free(x)表示取消对x 的符号限制,即可正、可负。) 结果: Global optimal solution found. Objective value: 9561.200 Extended solver steps: 0 Total solver iterations: 45 Variable Value Reduced Cost X1 6.000000 -76.70000 X2 31.00000 -151.2000 X3 16.00000 -150.0000 Row Slack or Surplus Dual Price 1 9561.200 1.000000 2 0.000000 0.000000 3 56.00000 0.000000 ———————— 非常简单! 在LINGO 中使用集合 为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化(下标)表示。

lingo运算符号和函数

4.1.2 逻辑运算符 在LINGO中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。 LINGO具有9种逻辑运算符: #not# 否定该操作数的逻辑值,#not#是一个一元运算符 #eq# 若两个运算数相等,则为true;否则为flase #ne# 若两个运算符不相等,则为true;否则为flase #gt# 若左边的运算符严格大于右边的运算符,则为true;否则为flase #ge# 若左边的运算符大于或等于右边的运算符,则为true;否则为flase #lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase #le# 若左边的运算符小于或等于右边的运算符,则为true;否则为flase #and# 仅当两个参数都为true时,结果为true;否则为flase #or# 仅当两个参数都为false时,结果为false;否则为true 这些运算符的优先级由高到低为: 高 #not# #eq# #ne# #gt# #ge# #lt# #le# 低 #and# #or# 例4.2逻辑运算符示例 2 #gt# 3 #and# 4 #gt# 2,其结果为假(0)。 4.1.3 关系运算符 在LINGO中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。 LINGO有三种关系运算符:“=”、“<=”和“>=”。LINGO中还能用“<”表示小于等于关系,“>”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B: A= 4.2 数学函数 LINGO提供了大量的标准数学函数: @abs(x) 返回x的绝对值 @sin(x) 返回x的正弦值,x采用弧度制 @cos(x) 返回x的余弦值 @tan(x) 返回x的正切值 @exp(x) 返回常数e的x次方 @log(x) 返回x的自然对数 @lgm(x) 返回x的gamma函数的自然对数 @sign(x) 如果x<0返回-1;否则,返回1 @floor(x) 返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0

lingo实验报告 学习lingo心得

隆展实业发展有限公司产品生产计划的优化研究 问题分析 题目要求在不追加产值的情况下实现产值最大化,所以采用线性规划模型。 求解思路 首先指出本例中的一个错误:最后一张表——原材料的成本中 对AZ-1的成本计算有误,根据前几张表,AZ-1的成本应为96.0625 1、首先计算出每种产品的利润=出售价格-成本 例生产一件AZ-1的利润为350-96.0625=253.9375 经计算得下表 产品利润单位:元 2、由题得,公司目前所能提供的最大流动资金为36万元,且不准备追加投入,所以要求在调整后生产结构中,总的成本不得超过36万元。 3、考虑工人的工时问题 一条装配线可以装配多中零件,但每个零件要求工人的工时不同,总需求时间不得超过工人的每月的总工时。例如,在组装这项工作中,8个工人每月的总工时为2496小时, 而组装各个产品的需求时间分别为0.6,0.67,0.56,0.56,0.58,0.58。若另X1代表AZ-1的产量;X2代表BZ-1的产量;X3代表LZ-7的产量;X4代表RZ-7的产量;X5代表LR-8的产量;X6代表RZ-8的产量,则可列出不等式: 0.60*X1+0.67*X2+0.56*X3+0.56*X4+0.58*X5+0.58*X6<=2496 同理可得关于拉直及切断、剪板及折弯、焊接网胚及附件和焊接底盘工作所需工时的不等式4、题目中有提到在产品的销售方面LZ/RZ-8以其大载重量,结实坚固深得顾客的青睐,并希望能增加产量。所以解决方案中,希望RZ-8比原先的产量要多,相对的,其他产品的产量就要减少。

Lingo 程序 MAX=253.9375*X1+229.5*X2+292.5625*X3+306.5*X4+503.2125*X5+538.5*X6; 96.0625*X1+90.5000*X2+167.4375*X3+213.5000*X4+216.7875*X5+276.5000*X6<=360000; 0.60*X1+0.67*X2+0.56*X3+0.56*X4+0.58*X5+0.58*X6<=2496; 0.30*X1+0.31*X2+0.325*X3+0.34*X4+0.33*X5+0.35*X6<=624; 0.90*X1+0.90*X2+0.95*X3+1.00*X4+1.01*X5+1.05*X6<=1872; 1.30*X1+1.00*X2+1.25*X3+1.25*X4+1.35*X5+1.35*X6<=2496; 0.76*X1+0.76*X2+0.80*X3+0.82*X4+0.82*X5+0.85*X6<=1560; X6>=240; X5<=320; X4<=480; X3<=560; X2<=80; X1<=160; 结果分析 Global optimal solution found at iteration: 6 Objective value: 741998.8 Variable Value Reduced Cost X1 160.0000 0.000000 X2 80.00000 0.000000 X3 0.000000 33.53187 X4 0.000000 109.3038 X5 320.0000 0.000000 X6 969.3237 0.000000 Row Slack or Surplus Dual Price 1 741998.8 1.000000 2 0.000000 1.947559 3 1598.592 0.000000 4 106.3367 0.000000 5 315.0101 0.000000 6 467.4130 0.000000 7 291.2749 0.000000 8 729.3237 0.000000

如何在lingo中使用集合1

例题1. 在lingo 中输入下列线性规划模型,并求解 ∑∈?=A j i j i x j i d z ),(),(),( min s.t. 1),1(≥∑∈V j j x , , },10,,2,1{,0),(x ,),(, 1,1),(V V A V V i i i j i x j j i x V i ?==∈=>=∑∈ 为非负实数 所有 的数值如下表:d d=0 8 5 9 12 14 12 16 17 22 8 0 9 15 16 8 11 18 14 22 5 9 0 7 9 11 7 12 12 17 9 15 7 0 3 17 10 7 15 15 12 16 9 3 0 8 10 6 15 15 14 8 11 17 8 0 9 14 8 16 12 11 7 10 10 9 0 8 6 11 16 18 12 7 6 14 8 0 11 11 17 14 12 15 15 8 6 11 0 10 22 22 17 15 15 16 11 11 10 0; 分析:这个模型输入的难点,在于变量的数量太多,足足有100个。约束条件也比较多,有没有什么方便的输入方法?下面介绍lingo 中集合的建立 新建lingo 文件 输入下面内容 model : sets : V/1..10/;!创建集合V; A(V,V):d,x;!创建集合A 是V 乘V.而d,x 是与A 同结构的,即d ,x 分别是10*10矩阵; endsets min =@sum (A(i,j):d(i,j)*x(i,j));!创建目标函数; @sum (V(j):x(1,j))>=1; !第一个约束条件; @for (V(j)|j#gt#1: !i#gt#1为逻辑判断语句表示i>1是返回真值,但这里不能直接写i>1,因为">"是关系运算符不是逻辑运算符; @sum (V(i):x(i,j))=1;); !利用循环函数表达:当i>1(即i 从2到10)时, {x(i,j):j=1..10}的和等于1;

13170130LINGO实验报告

2014?2015学年第二学期短学期 《数学软件及应用(Lingo)》实验报告 班级数学131班姓名张金库学号13170130 成绩______________________________ 实验名称 奶制品的生产与销售计划的制定 完成日期:2015年9月3日

一、实验名称:奶制品的生产与销售计划的制定 二、实验目的及任务 1?了解并掌握LINGO的使用方法、功能与应用; 2?学会利用LINGO去解决实际中的优化问题。 三、实验内容 问题一奶制品加工厂用牛奶生产A,A2两种奶制品,1桶牛奶可以在甲类设备上用12h 加工成3kg A1,或者在乙类设备上用8h加工成4kg A?。根据市场的需求,生产A, A?全部能售出,且每千克A获利24元,每千克A2获利16元。现在现在加工场每天能的到50桶牛奶的供应,每天正式工人总的劳动时间为480h,并且甲类设备每天至多能加工1OOkg A, 乙类设备的加工能力没有限制。为增加工厂的利益,开发奶制品的深加工技术:用2h和3元加工费,可将1kg A加工成0.8kg高级奶制品B i,也可将1kg傀加工成0.75kg高级奶制品B2,每千克B1能获利44元,每千克B2能获利32元。试为该工厂制订一个生产销售计 划,使每天的净利润最大,并讨论以下问题: (1)若投资30元可以增加供应1桶牛奶,投资3元可以增加1h的劳动时间,应否做 这些投资?若每天投资150,可以赚回多少? (2)每千克高级奶制品B1,B2的获利经常有10%的波动,对制订的生产销售计划有 无影响?若每千克B获利下降10%,计划应该变化吗? (3)若公司已经签订了每天销售10kg人的合同并且必须满足,该合同对公司的利润 有什么影响? 问题分析要求制定生产销售计划,决策变量可以先取作每天用多少桶牛奶生产A,,代,再添上用多少千克A加工B1,用多少千克A加工B2,但是问题要分析B1,B2的获利对生产销售计划的影响,所以决策变量取作A1,A2,B1,B2每天的销售量更为方便。目标 函数是工厂每天的净利润一一A1,A2,B1,B2的获利之和扣除深加工费用。 基本模型

lingo操作介绍

1.2 菜单介绍 1.2.1 File 1 New 新建一个窗口, 当你执行这个命令时, 会出现如下对话框: 你可以在对话框中选择你想要建立的类型. 类型如下: 1)扩展名为(*.lg4) LG4格式是LINGO4.0的版本,是在Windows下最主要的储存文件格式, 这种格式支持字体格式, 自定义格式以及动态连接, LG4以二进制格式存储, 所以不能被其它的应用软件直接读取. 2)扩展名为(*.lng) LNG是捷便的存储方式,是4.0版本前的标准文件格式,为了与前版本的兼容,所以还一直在用,LNG文件是以ASCII形式存储的,所以能被支持文本文件的应用程序读取.该格式不支持多种字体. 3)扩展名为(*.ltd) LTD是数据文件, 可以从@FILE函数导入数据,@FILE函数只能读取文本文件,所以所有的LTD文件是以ASCII形式存储, 也不支持多种字体. 4)扩展名为(*.ltf) LTF是LINGO的调试文件格式, 也是以ASCII格式存储,能直接被LINGO的File|Take command执行. 2 Log Output 输出文本文件,可以将随后原输出到报告窗口的内容输出到文本中. 该命令与Maple 中的writeto命令非常相似. 在Maple中输入如下: > x:=sin(5.); writeto("c://maple.txt"); y:=x+1: print(x,y); print(x); > y; > writeto(terminal);

> y; 执行菜单中的Edit|Excute|Worksheet, 按钮,窗口重新显示如下: > x:=sin(5.); writeto("c://maple.txt"); y:=x+1: print(x,y); print(x); x:=-.9589242747 > y; > writeto(terminal); > y; 0.4010757253 而在C盘的maple.txt文件的内容为: -.9589242747, .0410757253 -.9589242747 .0410757253 从中可以知道,用了writeto(filename)命令以后把结果输出到filename 中. 直到碰到writeto(terminal)命令时,才重新在工作窗口中显示. 当你点击菜单File|Log Output时,系统出现保存对话框,系统就会将命令窗口中的输出结果保存到指定的文件中. 3 Import LINDO File 该命令是用来导入LINDO软件保存的LINDO文件(*.LTX)格式. 只要在LINGO中导入LINDO文件格式, LINGO系统自动将该文件转化为LINGO可执行语句. 1.2.2 Edit 1 Paste Function 用该命令可以在当前点插入LINGO的内部函数, 2 Select Fonts 设置字体类型, 字体大小,字体颜色. 1.2.3 LINGO 1 Solve 用solve命令对当前窗口中的模型求解, 该命令只对report script窗口起作用, 不能对数据窗口求解.

Lingo软件在求解数学优化问题的使用技巧

Lingo软件在求解数学优化问题的使用技巧 LINGO是一种专门用于求解数学规划问题的软件包。由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。LINGO 主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。 LINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。 1.LINGO编写格式 LINGO模型以MODEL开始,以END结束。中间为语句,分为四大部分(SECTION):(1)集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(A TTRIBUTE,类似于数组)。 LINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:SETNAME/member list(or 1..n)/:attribute,attribute,etc。 另一类是是导出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为: SETNAME(set1,set2,etc。):attribute,attribute,etc。 如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。(2)目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。求解优化问题时,该部分是必须的。(3)数据部分(DA TA):这部分以“DA TA:”开始,以“END DA TA”结束。其作用在于对集合的属性(数组)输入必要的数值。格式为:attribut=value_list。该部分主要是方便数据的输入。 (4)初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。 编写LINGO程序要注意的几点: 1.所有的语句除SETS、ENDSETS、DA TA、ENDDA TA、INIT、ENDINIT和MODEL,END 之外必须以一个分号“;”结尾。 2.LINGO求解非线性规划时已约定各变量非负。 LINGO内部函数使用详解。 LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。 (1)常用数学函数 @ABS(X) 返回变量X的绝对数值。 @COS( X) 返回X的余弦值,X的单位为弧度 @EXP( X)

常见Lingo指令介绍

常见Lingo指令介绍 一、控制Sprite的常见指令 1.指令名称:sprite member 指令语法:the member of sprite 指令说明:sprite所代表的cast member。 例:精灵替换 set the member of sprite 1 to "yuan" 可改为:Sprite(1).member=”yuan” 点句表示法: ObjectName.[Property|function|Chunk that you want to specity] 2.指令名称:sprite memberNum 指令语法:the memberNum of sprite 指令说明:sprite所代表的cast member所在的位置。 例:循环播放 on exitFrame me if sprite (1). memberNum =10 then sprite (1). memberNum = 1 else sprite (1) .memberNum=sprite(1).memberNum+1 end if go to the frame end 3.旋转、倾斜、翻转精灵 指令说明:这些变换可以应用于位图、文本、矢量图形、GIF及Flash,但不能用于域,以及工具面板上的椭圆和矩形。 (1)旋转:正值代表顺时针,负值代表逆时针 sprite(1).rotation=30 set the rotation of sprite 1 to 30 例:指针调节 sprite(1).rotation=sprite(1).rotation+5 (2)倾斜:正值向右倾斜,负值向左倾斜,正常状态为0 sprite(1).skew=10 set the skew of sprite 1 to 10 例:图形变形 sprite(1).skew=sprite(1).skew+10 (3)翻转:左右(水平)翻转flipH,上下(垂直)翻转flipV,设置值为TRUE或FALSE (1或0) sprite(1).flipH=TURE sprite(1).flipV=1 例:翻转与恢复

LINGO软件及其应用

LINGO 软件及其应用 一、求解线性规划 例题1:目标函数:max z=2x1+3x2 约束条件:x1+2x2<=8 4x1<=17 4x2<=13 x1,x2>=0 输入语句: model: max=2*x1+3*x2; x1+2*x2<8; 4*x1<17; 4*x2<13; end 说明: 1)问题模型由MODEL:命令开始,END 结束,对简单模型可以省略。 2)目标函数必须由“min =”或“max =”开头。 3)分号是LINGO的分隔符。LINGO中的每一行都以分号结束,如果缺少,模型将无法求解。若一个命令或语句一行写不下,可以分多行写,但是,最后结束命令时,一定别忘了打个分号“;”,一行内也可写多个命令,只要每个用分号分开即可。 4)语句中乘号(*)不能省略,支持()的输入。 5)LINGO中<与<=均代表<=,>与>=也均代表>=。 6)LINGO中的注解必须用感叹号“!”开始,用分号结束。在感叹号和分号之间的所有内容都将被LINGO忽略。注释可以占据多行,也可以插入LINGO 表达式之中。 7)LINGO的命令从来不区分大小写,当你在LINGO中定义变量时,每个变量都要以26个字母开始,后面可跟数字或者下划线,最多可以是32个字符。 8)软件默认决策变量是非负的。如果需要一个变量取负数、整数或一定范

围内的值,可以通过变量限定函数加以限制。 @bin(x) 限制x为0或1 @bnd(L,x,U) 限制L≤x≤U @free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数 @gin(x) 限制x为整数 在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。 求解结果如下: Global optimal solution found. Objective value: 14.12500 Total solver iterations: 1 Variable Value Reduced Cost X1 4.250000 0.000000 X2 1.875000 0.000000 Row Slack or Surplus Dual Price 1 14.12500 1.000000 2 0.000000 1.500000 3 0.000000 0.1250000 4 5.500000 0.000000 例题2 一奶制品加工厂用牛奶生产A 1,A 2 两种奶制品,1桶牛奶可以在甲车 间用12小时加工成3公斤A 1,或者在乙车间用8小时加工成4公斤A 2 。根据市 场需求,生产的A 1,A 2 全部能售出,且每公斤A 1 获利24元,每公斤A 2 获利16元。 现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间480小时,并且甲车间每天至多能加工100公斤A 1 ,乙车间的加工能力没有限制。试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题:1)若用35元可以买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶?

lingo实验报告

lingo实验报告 以下是为大家整理的lingo实验报告的相关范文,本文关键词为lingo,实验,报告,实验,名称,推销员,指派,问题,目的,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。 一、实验名称:推销员指派问题二、实验目的及任务: 1、掌握Lingo软件的使用方法 2、编写简单的Lingo程序 3、解决Lingo中的最优指派问题 三、实验内容

1、问题描述 一个公司要分派5个推销员去5个地区推销某种产品,5个推销员在各个地区推销这种产品的预期利润如下表所示。若每个推销员只能去一个地区。应如何分派这5个推销员才能使公司的利润为最大? 2、模型建立 ?1指派第i个人去第j个地区决策变量:设xij??(i,j=1,2,3,4,5)0不指派第i个人去第j个地区?目标函数:设总利润为z,第i 个人去第j个地区的利润为A(,iji,j=1,2,3,4,5) 假设Aij为指派矩阵,则 maxz???Aijxij i?1j?155约束条件: 1.第j个地区只有一个人去: ?xi?15ij?1(j=1,2,3,4,5) 2.第i个人只去一个地区: ?xj?15ij?1(i=1,2,3,4,5) 由此得基本模型: maxz???Aijxij i?1j?155s,t, 5?xi?15ij?1(j=1,2,3,4,5) ?xj?1ij?1(i=1,2,3,4,5)

xij?0或1(i,j=1,2,3,4,5) 3、Lingo程序(一)常规程序Lingo输入: model: max=1*x11+8*x12+9*x13+2*x14+1*x15+5*x21+6*x22+3*x23+10*x24+ 7*x25+3*x31+10*x32+4*x33+11*x34+3*x35+7*x41+7*x42+5*x43+4*x4 4+8*x45+4*x51+2*x52+6*x53+3*x54+9*x55;x11+x12+x13+x14+x15=1;x 21+x22+x23+x24+x25=1;x31+x32+x33+x34+x35=1;x41+x42+x43+x44+x4 5=1;x51+x52+x53+x54+x55=1;x11+x21+x31+x41+x51=1;x12+x22+x32+x4 2+x52=1;x13+x23+x33+x43+x53=1;x14+x24+x34+x44+x54=1;x15+x25+x3 5+x45+x55=1;end Lingo输出: globaloptimalsolutionfound. objectivevalue:45.00000Infeasibilities:0.000000Totalsolveriterations:8 VariableValueReduced cost x117.000000 x120.000000 x130.000000 x140.0000000.0000001.0000000.0000007.000000 x158.000000

LINGO中的常见函数

@bin(x) 限制x为0或1 @bnd(L,x,U) 限制L≤x≤U @free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数 @gin(x) 限制x为整数 LINGO提供了大量的标准数学函数: @abs(x) 返回x的绝对值 @sin(x) 返回x的正弦值,x采用弧度制 @cos(x) 返回x的余弦值 @tan(x) 返回x的正切值 @exp(x) 返回常数e的x次方 @log(x) 返回x的自然对数 @lgm(x) 返回x的gamma函数的自然对数 @sign(x) 如果x<0返回-1;否则,返回1 @floor(x) 返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0 时,返回不低于x的最大整数。 @smax(x1,x2,…,xn) 返回x1,x2,…,xn中的最大值 @smin(x1,x2,…,xn) 返回x1,x2,…,xn中的最小值 LINGO具有9种逻辑运算符: #not# 否定该操作数的逻辑值,#not#是一个一元运算符 #eq# 若两个运算数相等,则为true;否则为flase #ne# 若两个运算符不相等,则为true;否则为flase #gt# 若左边的运算符严格大于右边的运算符,则为true;否则为flase #ge# 若左边的运算符大于或等于右边的运算符,则为true;否则为flase #lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase #le# 若左边的运算符小于或等于右边的运算符,则为true;否则为flase #and# 仅当两个参数都为true时,结果为true;否则为flase #or# 仅当两个参数都为false时,结果为false;否则为true ^乘方 ﹡乘 /除 ﹢加 ﹣减 LINGO唯一的一元算术运算符是取反函数“﹣”。 这些运算符的优先级由高到底为: 高﹣(取反) ^ ﹡/ 低﹢﹣ 运算符的运算次序为从左到右按优先级高低来执行。运算的次序可以用圆括号“()”来改变。

lingo实验报告

、实验名称:推销员指派问题 二、实验目的及任务: 1、掌握Lingo软件的使用方法 2、编写简单的Lin go程序 3、解决Lingo中的最优指派问题 三、实验内容 1、问题描述 一个公司要分派5个推销员去5个地区推销某种产品,5个推销员在各个地区推销这种产品的预期利润如下表所示。若每个推销员只能去一个地区。应如何分派这5个推销员才能使公司的利润为最大? 2、模型建立 决策变量1指派第i个人去第j个地区 (i,j=1,2,3,4,5) : ij 0不指派第i个人去第j个地区 目标函数:设总利润为Z,第i个人去第j个地区的利润为A ij(i,j=1,2,3,4,5),假设A ij为指派矩阵,则 5 5 Max Z A jj X jj i 1 j 1 约束条件: 1.第j个地区只有一个人去: 5 X ij 1 (j=1,2,3,4,5) i 1 2.第i个人只去一个地区: 5 X ij 1 (i=1,2,3,4,5) j 1 由此得基本模型:

5 5 3、Lingo 程序 (一)常规程序 Lingo 输入: model : max=1*x11+8*x12+9*x13+2*x14+1*x15+5*x21+6*x22+3*x23+10*x24+7*x25+ 3*x31+10*x32+4*x33+11*x34+3*x35+7*x41+7*x42+5*x43+4*x44+8*x45+4*x 51+2*x52+6*x53+3*x54+9*x55; x11+x12+x13+x14+x15=1; x21+x22+x23+x24+x25=1; x31+x32+x33+x34+x35=1; x41+x42+x43+x44+x45=1; x51+x52+x53+x54+x55=1; x11+x21+x31+x41+x51=1; x12+x22+x32+x42+x52=1; x13+x23+x33+x43+x53=1; x14+x24+x34+x44+x54=1; x15+x25+x35+x45+x55=1; end Lingo 输出: Global optimal solution found. Objective value: Infeasibilities: Total solver iterations: Max A ij x ij j1 S,t, x ij i1 j=1,2,3,4,5) x ij 1 i=1,2,3,4,5) j1 x ij 0或1 i,j=1,2,3,4,5) Variable Value Reduced 45.00000 0.000000

LINGO的使用方法说明大全

LINGO的使用简介 LINGO软件是美国的LINGO系统公司开发的一套专门用于求解最优化问题的软件包.LINGO除了能够用于求解线性规划和二次规划外,还可以用于非线性规划求解、以及一些线性和非线性方程(组)的求解等.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,即可以求解整数规划,而且执行速度快.LINGO是用来求解线性和非线性优化问题的简易工具.LINGO置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果.在这里仅简单介绍LINGO的使用方法. LINGO(Linear INteractive and General Optimizer )的基本含义是交互式的线性和通过优化求解器.它是美国芝加哥大学的 Linus Schrage 教授于1980年开发了一套用于求解最优化问题的工具包,后来经过完善成何扩充,并成立了LINDO系统公司.这套软件主要产品有:LINDO,LINGO,LINDO API和What’sBest.它们在求解最优化问题上,与同类软件相比有着绝对的优势.软件有演示版和正式版.正式版包括:求解包(solver suite)、高级版(super)、超级版(hyper)、工业版(industrial)、扩展版(extended).不同版本的LINGO对求解问题的规模有限制,如附表3-1所示. 附表3-1 不同版本LINGO对求解规模的限制 版本类型总变量数整数变量数非线性变量数约束数 演示版 300 30 30 150 求解包 500 50 50 250 高级版 2000 200 200 1000 超级版 8000 800 800 4000 工业版 32000 3200 32000 16000 扩展版无限无限无限无限 3.1 LINGO程序框架 LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络最优化问题和最大最小求解问题,以及排队论模型中最优化等问题. 一个LINGO程序一般会包括以下几个部分: (1) 集合段:集部分是LINGO模型的一个可选部分.在LINGO模型中使用集之前,必须在集部分事先定义.集部分以关键字“sets:”开始,以“endsets”结束.一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分.一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须先定义. (2) 数据段:在处理模型的数据时,需要为集部分定义的某些元素在LINGO求解模型之前为其指定

运筹学实验报告-lingo软件的使用-习题代码

运筹学 实验报告 姓名: 学号: 班级:

相关问题说明: 一、实验性质和教学目的 本实验是运筹学课安排的上机操作实验。 目的在于了解、熟悉计算机Lingo软件在运筹学模型求解中的作用,激发学习兴趣,提高学习效果,增强自身的动手能力,提高实际应用能力。 二、实验基本要求 要求学生: 1. 实验前认真做好理论准备,仔细阅读实验指导书; 2. 遵从教师指导,认真完成实验任务,按时按质提交实验报告。 三、主要参考资料 1.LINGO软件 2. LINGO8.0及其在环境系统优化中的应用,大学,2005 3. 优化建模与LINDO/LINGO软件,清华大学,2005 4.运筹学编写组主编,运筹学(修订版),清华大学,1990 5.蓝伯雄主编,管理数学(下)—运筹学,清华大学,1997 6.胡运权主编,运筹学习题集(修订版),清华大学,1995 7.胡运权主编,运筹学教程(第二版),清华大学,2003

实验容 1、线性规划问题: ????? ? ?≥≤+≤+≤++=0 ,13119241171289..68max 2121212121x x x x x x x x t s x x z (1) 给出原始代码;(2) 计算结果(包括灵敏度分析,求解结果粘贴); (3) 回答下列问题(手写): a ) 最优解及最优目标函数值是多少; b ) 资源的对偶价格各为多少,并说明对偶价格的含义; c ) 为了使目标函数值增加最多,让你选择一个约束条件,将它的常数项增加一个单位,你将选择哪一个约束条件?这时目标函数值将是多少? d ) 对x 2的目标函数系数进行灵敏度分析; e ) 对第2个约束的约束右端项进行灵敏度分析; f ) 结合本题的结果解释“Reduced Cost ”的含义。 对偶价格就是说 约束方程右端变量增加1对目标函数值的影响 答案: (1)代码 max =8*x1+6*x2; 9*x1+8*x2<=12; 7*x1+11*x2<=24; 9*x1+11*x2<=13; x1>=0; x2>=0; (2)计算结果 Global optimal solution found. Objective value: 10.66667 Total solver iterations: 2 Variable Value Reduced Cost X1 1.333333 0.000000 X2 0.000000 1.111111 Row Slack or Surplus Dual Price 1 10.66667 1.000000 2 0.000000 0.8888889 3 14.66667 0.000000 4 1.000000 0.000000

相关主题
文本预览
相关文档 最新文档