- 相關(guān)推薦
運(yùn)籌學(xué)課程設(shè)計(jì)源代碼-題目是《某商店要制訂明年第一季度某種商品的進(jìn)貨和銷售計(jì)劃》
運(yùn)籌學(xué)建模與源代碼
題目:某商店要制訂明年第一季度某種商品的進(jìn)貨和銷售計(jì)劃。一直該店的倉庫容量最多
可存儲該種商品500件,而今年年底有200件存貨。該店在每月月初進(jìn)貨一次。一直各月份進(jìn)貨和銷售該種商品的單價(jià)如下表所示。問每個(gè)月應(yīng)進(jìn)貨和銷售該種商品個(gè)多少件,才能使總利潤最大。并按要求分別完成下列分析:(1)2月份的進(jìn)貨單價(jià)在何范圍內(nèi)變化時(shí)最優(yōu)進(jìn)銷策略不變?(2)3月份的售價(jià)在何范圍內(nèi)變化是最優(yōu)進(jìn)銷策略不變?(3)第一月份初庫
1.所建模型
1.1 設(shè)定變量 設(shè)x1為一月份的進(jìn)貨量 x2 為二月份的進(jìn)貨量 x3為三月份的進(jìn)貨量 x4為一月份的銷售量 x5為二月份的銷售量 x6為三月份的銷售量
2.2 約束條件的確定
一月份的進(jìn)貨量加月初庫存量小于總庫存量:x1 ≤300 一月份的銷售量小于總庫存量: -x1+ x4 ≤200 二月份的進(jìn)貨量月初加庫存量小于總庫存量:x1+ x2–x4≤300
二月份的銷售量小于總庫存量: -x1–x2+ x4+ x5 ≤200 三月份的進(jìn)貨量加月初庫存量小于總庫存量:x1+x2+ x3–x4–x5 ≤300 三月份的銷售量小于總庫存量: -x1–x2–x3+ x4+ x5+ x6 ≤200 2.3 根據(jù)題意推理
maxZ=-8 x1-6 x2-9 x3+9 x4+8 x5+10 x6
x1 ≤300 -x1+ x4 ≤200 x1+ x2–x4≤300
-x1–x2+ x4+ x5 ≤200 x1+x2+ x3–x4–x5 ≤300 -x1–x2–x3+ x4+ x5+ x6 ≤200
xi ≥0 , i=1、2、3、4、5、6
2.4 計(jì)算機(jī)求解前的手工數(shù)據(jù)準(zhǔn)備
將原問題的所有約束條件添加人工變量x7、x8、x9、x10、x11、x12 maxZ=-8 x1-6 x2-9 x3+9 x4+8 x5+10 x6 x1 + x7 =300
-x1+ x4 + x8 =200 x1+ x2–x4 + x9 =300
-x1–x2+ x4+ x5 + x10 =200 x1+x2+ x3–x4–x5 + x11 =300 -x1–x2–x3+ x4+ x5+ x6+ x12 =200
xi ≥0,i=1、2、3、4、5、6、7、8、9、10、11、12 3、程序流程圖
二、//程序源代碼
JSP 部分
=
value="
開
始
"
//prompt("please input base variable quantity divideby '$':","");//輸入框
Js 腳本代碼
function yemian(jj,ii,get_re,base_variable_arr,arr_first_varry){//畫出兩階段法的頁面 var tb_body="",tr_value="",tab_value="",input_value="",i=1,j=1; var tr1_value=new Array();
var arr_input_value_2=new Array(); var arr_get_re=new Array(); if(get_re!==null&&get_re!=""){ arr_get_re=get_re.toString().substring(0,get_re.length-1).split("#");//中間所有的數(shù)據(jù) arr_input_value_2=arr_get_re[0].toString().substring(0,arr_get_re[0].length-1).split(",");//第二行的數(shù)據(jù) }
if(arr_first_varry==null){ arr_first_varry=new Array(); for(var kk=1;kk<=jj;kk++){ var X_j="X"+kk.toString(); arr_first_varry.push(X_j); } }
while(i<=ii){ while(i==1){//第一行 var fs_wz=0; tr_value=first_line(i,jj,fs_wz,arr_first_varry);//fs_wz--->負(fù)數(shù)位置 i++; } while(i==2){
//prompt("please input base variable quantity divideby '$':","");//輸入框
Js 腳本代碼
function yemian(jj,ii,get_re,base_variable_arr,arr_first_varry){//畫出兩階段法的頁面
var tb_body="",tr_value="",tab_value="",input_value="",i=1,j=1;
var tr1_value=new Array();
var arr_input_value_2=new Array();
var arr_get_re=new Array();
if(get_re!==null&&get_re!=""){
arr_get_re=get_re.toString().substring(0,get_re.length-1).split("#");//中間所有的數(shù)據(jù) arr_input_value_2=arr_get_re[0].toString().substring(0,arr_get_re[0].length-1).split(",");//第二行的數(shù)據(jù)
}
if(arr_first_varry==null){
arr_first_varry=new Array();
for(var kk=1;kk<=jj;kk++){
var X_j="X"+kk.toString();
arr_first_varry.push(X_j);
}
}
while(i<=ii){
while(i==1){//第一行
var fs_wz=0;
tr_value=first_line(i,jj,fs_wz,arr_first_varry);//fs_wz--->負(fù)數(shù)位置
i++;
}
while(i==2){
tr_value+=second_line(i,jj,arr_input_value_2);
i++;
}
if(i>=3&&i<=ii){
tr_value+=mid_line(ii,jj,arr_get_re,base_variable_arr);
break;
}
}
/*
if(i<=ii){
for(var row_i=i;row_i<=ii;row_i++){
if(row_i==1){//第一行
var fs_wz=0;
tr_value=first_line(row_i,jj,fs_wz,arr_first_varry);//fs_wz--->負(fù)數(shù)位置
row_i++;
}
else if(row_i==2){
tr_value+=second_line(row_i,jj,arr_input_value_2);
row_i++;
}
else if(row_i>=3&&row_i<=ii){
tr_value+=mid_line(ii,jj,arr_get_re,base_variable_arr);
// break;
}
}
}
*/
tab_value=""+tr_value+"";
tb_body=document.getElementById("div1");
tb_body.innerHTML=tab_value;
// hidden();
document.getElementById("hidden1").value=jj;//把列數(shù)值 jj賦給隱含文本
document.getElementById("hidden2").value=ii;//把行數(shù)值 ii賦給隱含文本
}
function first_line(i,jj,fs_wz,arr_first_varry){//第一行 function:Add_Row(),Add_Column();Delete_Column()
var td_value1="",td1_value="",Xj="",tr_value1="",Xj_all="";
for(var j=1;j<=jj;j++){
Xj_all+=arr_first_varry[j-1].toString()+"$";
td_value1=td_value1+""+arr_first_varry[j-1]+"";
}
}
var base_input1=document.getElementById("first_bl");//變量存入隱含文本------7.10 base_input1.value=Xj_all; td1_value="XBb"+td_value1; //td1_value=td1_value+td_value1;//前兩單元格 tr_value1=""+td1_value+""; return tr_value1;
function second_line(i,jj,arr_input_value_2){//第二行 function:Result(),Delete_Row() var td_value2="",td2_value="",txt_id="",tr_value2="" ,Xj="",input_str="";
for(var j=0;j<=jj;j++){
if(arr_input_value_2[j]=="undefined"||arr_input_value_2[j]==null){
arr_input_value_2[j]=""; }
txt_id="txt"+i.toString()+j.toString();
input_str="" ;
td_value2=td_value2 +""+input_str+"";
}
td2_value="Z"+td_value2;
tr_value2=""+td2_value+"";
////alert("tr_value2 =="+tr_value2);
return tr_value2;
}
function mid_line(ii,jj,arr_get_re,base_variable_arr){//中間行
var arr_input_value_mid=new Array();
var td3_value="",td_value3="",txt_id="",txt_id1="",select_option1="",tr_value_mid=""; if(base_variable_arr==null){
base_variable_arr=new Array()
}
for(var i=3;i<=parseInt(ii);i++){
arr_input_value_mid[i-3]=new Array();
//alert("arr_get_re 2222 =="+arr_get_re.toString());
if(arr_get_re!=""&&arr_get_re!="undefined"&&i<=parseInt(ii)){
//if(arr_get_re[i-2]!=""&&arr_get_re[i-2]!="undefined"){
arr_input_value_mid[i-3]=arr_get_re[i-2].toString().substring(0,arr_get_re[i-2].length).toString().split(",");///////////////
//}
}else{
arr_input_value_mid[i-3]=new Array();
for(var n=0;n
arr_input_value_mid[i-3][n]="";
}
}
for(var j=0;j<=jj;j++){
txt_id="txt"+i.toString()+j.toString();
if(arr_input_value_mid[i-3][j]=="undefined"||arr_input_value_mid[i-3][j]==null){ arr_input_value_mid[i-3][j]="";
}
var X_value1="" ;
td_value3 +=""+X_value1+"";
}
if(base_variable_arr[i-3]==null||base_variable_arr[i-3]==""||base_variable_arr[i-3]=="undefined"){
base_variable_arr[i-3]="";
}
select_option1="
=\">><\"><</option>";td3_value +=""+base_variable_arr[i-3]+""+td_value3+"";
tr_value_mid+=""+td3_value+"";
td3_value="";
td_value3="";
}
return tr_value_mid;
}
function Go_on() {//轉(zhuǎn)標(biāo)準(zhǔn)形式
var ii = 0, jj = 0;
var input_value_str = "", get_re = "";
var arr_input_value = new Array();
//var aa=prompt("please input base variable quantity divideby '$':","");//輸入基變量 用 "$" 做分隔符
var aa = prompt("輸入基變量用 $ 做分隔符(例如X2$X3)", "");//輸入基變量 用 "$" 做分隔符
var base_variable_arr = new Array();
if (aa != ""&& aa != null && aa != "undefined") {
document.getElementById("basic_standard").value=aa;
base_variable_arr = aa.toString().split("$");
// var base_input = document.getElementById("basic_standard");//基變量存入隱含文本------7.10
// base_input.value = aa;
}
jj = parseInt(document.getElementById("hidden1").value);
ii = parseInt(document.getElementById("hidden2").value);
get_re = get_input_value(ii, jj);
var get_res = get_re.replace(/,#/g, "#");
var base_input2 = document.getElementById("mid_value");//基變量存入隱含文本------7.10
base_input2.value = get_res;
yemian(jj, ii, get_re, base_variable_arr);
}
function get_input_value(ii,jj){//獲取table值 input+select-----
var txt_id="",input_value_str="",input_value_all="";
for(var i=2;i<=ii;i++){
for(var j=0;j<=jj;j++){
txt_id="txt"+i.toString()+j.toString();
input_value_str+=document.getElementById(txt_id).value+",";
}
input_value_str+="#";
}
return input_value_str;
}
function Add_Column(){//增加一列
var ii=0,jj=0,get_re="";
jj=parseInt(document.getElementById("hidden1").value)+1;
ii=parseInt(document.getElementById("hidden2").value);
get_re=get_input_value(ii,jj-1).toString();
yemian(jj,ii,get_re);
}
function Delete_Column(){//刪除一列
var ii=0,jj=0,get_re="";
jj=parseInt(document.getElementById("hidden1").value)-1;
ii=parseInt(document.getElementById("hidden2").value);
get_re=get_input_value(ii,jj+1).toString().substring(0,get_input_value(ii,jj+1).length-1); yemian(jj,ii,get_re);
}
function Add_Row(){//增加一行
var ii=0,jj=0,get_re="";
jj=parseInt(document.getElementById("hidden1").value);
ii=parseInt(document.getElementById("hidden2").value)+1;
get_re=get_input_value(ii-1,jj).toString()+"#";
yemian(jj,ii,get_re);
}
function Delete_Row(){//刪除一行
var ii=0,jj=0,get_re="";
jj=parseInt(document.getElementById("hidden1").value);
ii=parseInt(document.getElementById("hidden2").value)-1;
get_re=get_input_value(ii+1,jj).toString().substring(0,get_input_value(ii+1,jj).length-1); yemian(jj,ii,get_re);
}
function Result(){ //計(jì)算出最后結(jié)果,顯示在頁面上
var str_base="",str_varry="",str_mid="";
//var arr_base=new Array();
var arr_varry=new Array();
var arr_mid=new Array();
var ew_arr_mid=new Array();
var jj=0, ii=0;
jj=parseInt(document.getElementById("hidden1").value);
ii=parseInt(document.getElementById("hidden2").value);
str_base=document.getElementById("basic_standard").value;
;
str_varry=document.getElementById("first_bl").value;
str_mid=document.getElementById("mid_value").value;
str_mid=str_mid.toString().substring(0,str_mid.length-1);
// alert("str_base =="+str_base +" str_varry =="+str_varry +" str_mid
//7_11_15_43 ls
//arr_base=str_base.toString().split("$");
arr_varry=str_varry.toString().substring(0,str_varry.length-1).split("$");
arr_mid=str_mid.toString().split("#");
for(var k=0;k
ew_arr_mid[k]=new Array();
ew_arr_mid[k]=arr_mid[k].toString().split(",");
}
for(var k=0;k
for(var j=0;j
if(ew_arr_mid[k][j]==""){
//alert("是空格啊");
ew_arr_mid[k][j]=0;
}
else {
ew_arr_mid[k][j]=parseFloat(ew_arr_mid[k][j]);
}
}
}
var arr_not_base_loc=find_not_base_loc(str_base,arr_varry);
var fs_loc_min=first_line_juge(arr_not_base_loc,ew_arr_mid); =="+str_mid);
if(fs_loc_min!=-1){
alert("222222222222這是基變量啊 str_base============"+str_base); workout_result(ew_arr_mid,str_base,arr_varry,fs_loc_min,jj,ii);////--------------- }else{alert("1111111已經(jīng)是最優(yōu)解,無需繼續(xù)計(jì)算!。");}
}
function find_not_base_loc(str_base,arr_varry){//找出非基變量的位置
//var arr_loc_jl=new Array();
var arr_loc_jl="";
for(var i=0;i
var ss=arr_varry[i].toString();
var loc_jl=str_base.toString().indexOf(ss,0);
if(loc_jl==-1){
arr_loc_jl=arr_loc_jl+(i+1)+",";
//break;
}
}
alert("非基變量的位置 ===="+arr_loc_jl);
return arr_loc_jl;
}
function first_line_juge(arr_not_base_loc,ew_arr_mid){//找出非基變量負(fù)數(shù)最小的位置 var fs_loc=-1,n_b_min=0;
var arr_not_base=new Array();
arr_not_base=arr_not_base_loc.split(",");
for(var k=0;k
var kk=parseInt(arr_not_base[k]);
var n_b_judge=parseInt(ew_arr_mid[0][kk]);
if(n_b_judge
n_b_min=n_b_judge;
fs_loc=kk
}
}
alert("主元所在的列數(shù) ==="+fs_loc);
return fs_loc;
}
//ew_arr_mid 中間數(shù)組串;str_base 基變量串;arr_varry 首行的數(shù)組;fs_loc_min 主元所在列;
function workout_result(ew_arr_mid,str_base,arr_varry,fs_loc_min,jj,ii){
var bz_min_loc=-1;//記錄最小位置
var bz_jl=1000000;//記錄基變量與最小負(fù)數(shù)列的比值 確定換入 換出變量 //7_11_16_18 ls
var arr_base=new Array();
arr_base=str_base.split("$"); for(var k=1;k0){ } } var bz_pd=ew_arr_mid[k][0]/ew_arr_mid[k][fs_loc_min];//比值 if(bz_pd=0){ bz_jl=bz_pd; bz_min_loc=k; } if(bz_min_loc==-1){//比值全部為負(fù)(不是單純刑法,未處理) alert("此題用單純型法無法求解"); } else if(bz_min_loc!=-1){
//arr_base[bz_min_loc-1]=arr_varry[fs_loc_min-1];//互換 換入 換出 變量(arr_varry[fs_loc_min-1] 為X1,X2)(bz_min_loc 行)
//7_11_16_26 ls
arr_base[bz_min_loc-1]=arr_varry[fs_loc_min-1];//互換 換入 換出 變量(arr_varry[fs_loc_min-1] 為X1,X2)(bz_min_loc 行)
var jz_cs_z=ew_arr_mid[bz_min_loc][fs_loc_min];//(取出主元)基準(zhǔn) 乘數(shù) for(var m=0;m<=jj;m++){//主元行除以主元值(主元化為1)
ew_arr_mid[bz_min_loc][m]=ew_arr_mid[bz_min_loc][m]/jz_cs_z;
}
var a=1;
//行下表出錯(cuò)
for(var n=0;n
var jz_cs_f=ew_arr_mid[n][fs_loc_min];//基準(zhǔn) 乘數(shù)
for(var j=0;j<=jj;j++){
if(n==bz_min_loc){
a=1;
}else if(n!=bz_min_loc){
if(jz_cs_f==0){
a=1;
}else if(jz_cs_f!=0){
ew_arr_mid[n][j]=parseInt(ew_arr_mid[n][j])+parseInt(ew_arr_mid[bz_min_loc][j])*(-jz_cs_f);//循環(huán)改變值
ew_arr_mid[n][j]=ForDight(ew_arr_mid[n][j],2);//保留兩位小數(shù) a=1;
}
} } } str_base=""; for(var base_i=0;base_i
var fs_loc_min1=first_line_juge(arr_not_base_loc,ew_arr_mid);//找目標(biāo)函數(shù)中,負(fù)數(shù)最小的位置
if(fs_loc_min1!=-1){//若非基變量沒有負(fù)數(shù),則停止
workout_result(ew_arr_mid,str_base,arr_varry,fs_loc_min1,jj,ii);
}else{alert("2222222應(yīng)經(jīng)是最優(yōu)解,無需繼續(xù)計(jì)算!!");}
//得到最后結(jié)果,將最后結(jié)果顯示在頁面上
var get_re="";
for(var rr=0;rr
for(var cc=0;cc<=jj;cc++){
get_re+=ew_arr_mid[rr][cc].toString()+",";
//7_11_16_38 ls
//get_re+=ew_arr_mid[rr+1][cc].toString()+",";
}
get_re+="#";
}
get_re=get_re.toString().substring(0,get_re.toString().length-1);
yemian(jj,ii,get_re,arr_base,arr_varry);//////////////////////////////////
}
function ForDight(Dight,How){//保留小數(shù)兩位
Dight=Math.round(Dight*Math.pow(10,How))/Math.pow(10,How);
return Dight;
}
【運(yùn)籌學(xué)課程設(shè)計(jì)源代碼-題目是《某商店要制訂明年第一季度某種商品的進(jìn)貨和銷】相關(guān)文章:
某商店售兩件衣服05-01
漢語自稱代詞某、某甲和某乙04-28
我要開這種商店作文10-20
某鎮(zhèn)制訂“十二五”工作規(guī)劃綱要(參考稿)04-30
如何制訂期學(xué)習(xí)計(jì)劃和目標(biāo)09-02
某種觸動(dòng)作文05-01
我和姐姐逛商店作文04-30
與某種植物有關(guān)的詩句06-29