产品A
(件)
|
成本
(元/件)
|
产品B
(件)
|
成本
(元/件)
|
产品C
(件)
|
成本
(元/件)
|
0~40
41~100
101~ 150
150以上
|
10
9
8
7
|
0~50
51~100
100以上
|
6
4
3
|
0~100
100以上
|
5
4
|
maxZ=12x1+7x2+6x3-(ax1+bx2+cx3);


#include <WINDOWS.H>
#include <string.h>
#include <stdio.h>
#include <STDLIB.H>
#include <MATH.H>
#define N 3
#define DllExport extern "C" _declspec(dllexport)//导出函数
//该函数计算成本
DllExport void MYUSER(int* NumArgs,double *x,double *dResult)
{
double sum;
if (*NumArgs<N)
{
MessageBox(NULL,"输入变量不足","输入错误",MB_OK);
*dResult=-1;
exit(0);
}
sum=0;
//产品A的成本计算
if (x[0]>=0 && x[0]<=40)
{
sum+=10*x[0];
}
else if (x[0]>=41 && x[0]<=100)//原书错误为x[1]
{
sum+=9*x[0];
}
else if (x[0]>=101 && x[0]<=150)
{
sum+=8*x[0];
}
else
sum+=7*x[0];
//产品B的成本计算
if (x[1]>=0 && x[1]<=50)
{
sum+=6*x[1];
}
else if (x[1]>=51 && x[1]<=100)
{
sum+=4*x[1];
}
else
{
sum+=3*x[1];
}
//产品C的成本计算
if (x[2]>=0 && x[2]<=100)
{
sum+=5*x[2];
}
else
{
sum+=4*x[2];
}
*dResult=sum;//返回成本总值
}
按F7运行后生成动态库CALC.DLL,将其拷贝到LINGO目录下,并将文件改名为MYUSER.DLL。启动LINGO就可以通过外部函数@USER调用动态库中自己编写的函数。
Lingo模型
!采用动态库编写自己的函数;
MODEL:
max=12*x1+7*x2+6*x3-@USER(x1,x2,x3);!目标函数;
x1+2*x2+x3<=100;!技术服务的约束;
10*x1+4*x2+5*x3<=700;!直接劳动的约束;
3*x1+2*x2+x3<=400;!材料的约束;
@GIN(x1);
@GIN(x2);
@GIN(x3);
END
结果
Local optimal solution found.
Objective value: 263.0000
Objective bound: 263.0000
Infeasibilities: 0.5000000E-06
Extended solver steps: 2
Total solver iterations: 7231
Variable Value Reduced Cost
X1 41.00000 -4.500000
X2 1.000000 0.000000
X3 57.00000 -0.5000001
Row Slack or Surplus Dual Price
1 263.0000 1.000000
2 0.000000 0.5000000
3 1.000002 0.000000
4 218.0000 0.000000