📄 productionstartsschedule.java
字号:
package com.power.pipeengine.Report;
import java.util.*;
import java.io.*;
import com.power.pipeengine.Variable.*;
import com.power.pipeengine.Constraint.*;
import com.power.pipeengine.InputData.*;
import com.power.pipeengine.LPModel.*;
import com.power.pipeengine.Entity.*;
import com.power.pipeengine.*;
import com.power.pipe.*;
import com.power.pipeengine.DispatchReport.*;
import com.power.pipeengine.DispatchReportMap.*;
public class ProductionStartsSchedule extends Report
{
static ResourceBundle res = ResourceBundle.getBundle("com.power.pipeengine.Res",
EngineConfig.getInstance().getLocale() );
private static final ProductionStartsSchedule INSTANCE =
new ProductionStartsSchedule();
// Private constructor supresses
// default public constructor
private ProductionStartsSchedule( ) {
_fileName = "ProductionStartsSchedule";
//initFileWriter();
}
public static ProductionStartsSchedule getInstance( ) {
return INSTANCE;
}
private StringBuffer content = new StringBuffer();
private Vector[] routeArray = new Vector[DataModel.getInstance().getRoutes().getNumberOfRoutes()];
//private Vector schedule = new Vector();
public Vector[] getStartsSchedules() {
return routeArray;
}
public void createReport() throws IOException {
DataModel dataModel = DataModel.getInstance();
Vector buckets = dataModel.getCalendar().getBuckets();
Routes routes = dataModel.getRoutes();
StartsVariable startsVar = StartsVariable.getInstance();
OutsVariable outsVar = OutsVariable.getInstance();
Solution sol = Solution.getInstance();
RouteProducts rteProds = dataModel.getRouteProducts();
Enumeration allRoutes = routes.getRoutes().elements();
String separator = GlobalConfig.getInstance().getSeparator();
double precision = EngineConfig.getInstance().PRECISION;
while( allRoutes.hasMoreElements() ) {
Route r = (Route) allRoutes.nextElement();
Product p = r.getProduct();
for( int i=0; i<buckets.size(); i++ ) {
Bucket b = (Bucket) buckets.elementAt( i );
String start = startsVar.getVariable( r, p, b );
double startValue = sol.getValue( start );
//skip if no start
if( startValue <= precision ) continue;
/*String lineOut = b.getBucketID() + separator +
b.getFormatedDate() + separator +
r.getRouteID() + separator +
r.getProductID() + separator +
r.getFacility().getDescription() + separator +
startValue + "\n";*/
StartsSchedule aSchedule = new StartsSchedule( b.getBucketID(),
r.getRouteID(),
startValue );
//schedule.add( aSchedule );
if( null == routeArray[ r.getRouteID() - 1 ] ) {
routeArray[ r.getRouteID() - 1 ] = new Vector();
}
//routeArray[ r.getRouteID() - 1 ].add( aSchedule );
insertByBucket( routeArray[ r.getRouteID() - 1 ], aSchedule );
}
}
//_myFileWriter.close();
//super.flush( content.toString() );
content = null;
System.gc();
groupToIntegers();
}
private void insertByBucket( Vector vec, StartsSchedule aSchedule ) {
if( vec.size() == 0 ) {
vec.add( aSchedule );
return;
}
for( int i=0; i<vec.size(); i++ ) {
StartsSchedule tmpSched = (StartsSchedule) vec.elementAt( i );
if( aSchedule.getBucketID() < tmpSched.getBucketID() ) {
vec.insertElementAt( aSchedule, i );
return;
}
}
vec.add( aSchedule );
}
public void reset() {
content = new StringBuffer();
}
public void groupToIntegers() {
ResourceUses rscUses = DataModel.getInstance().getResourceUses();
Enumeration allDmds = DataModel.getInstance().getProductDemands().getAllDemands().elements();
try{
WorkingHours.getInstance().readData();
PeriodDateMap.getInstance().readData();
} catch( Exception e) {
System.out.println( "Reading error: " + e.getMessage() );
}
while( allDmds.hasMoreElements() ) {
ProductDemand aDmd = (ProductDemand) allDmds.nextElement();
Vector routes = aDmd.getProducingRoutes();
//System.out.println( "debug 2" );
for( int i=routes.size()-1; i>=0; i-- ) {
//System.out.println( "debug 3" );
Route rte = (Route) routes.elementAt( i );
//System.out.println( "debug 4" );
Vector rteArray = routeArray[ rte.getRouteID() - 1 ];
//System.out.println( "debug 5" );
if( null == rteArray ) continue;
double decimal = 0;
StartsSchedule lastSchedule = null;
int lastIndex = 0;
Vector rscUseVec = rscUses.getResourceUse( rte.getRouteID() );
ResourceUse rscUse= null;
Resource rsc = null;
if( null != rscUseVec ) {
rscUse = (ResourceUse) rscUseVec.elementAt( 0 );
rsc = rscUse.getResource();
}
for( int j=0; j<rteArray.size(); j++ ) {
StartsSchedule aSchedule = (StartsSchedule) rteArray.elementAt( j );
double starts = aSchedule.getStartsValue();
decimal += aSchedule.getStartsValue() - Math.floor( aSchedule.getStartsValue());
aSchedule.integrizeStarts();
//System.out.println( "debug 8" );
if( null != rscUseVec && aSchedule.getStartsValue() != 0 ) {
rsc.consumeCapacity(aSchedule.getBucketID(),
aSchedule.getStartsValue() / rscUse.getUPH());
}
//if( starts == Math.floor( starts ) ) continue;
//System.out.println( "debug 9" );
if( null == lastSchedule ) {
lastSchedule = aSchedule;
lastIndex = j;
} else {
//System.out.println( "debug 10" );
if( decimal >= .85 ) {
if( null != rscUseVec ) {
for (int k = lastIndex; k <= j; k++) {
//System.out.println( "debug 10.1" );
lastSchedule = (StartsSchedule) rteArray.elementAt(k);
if (!mayAdjustStarts(lastSchedule.getRouteID(),
lastSchedule.getBucketID())){
continue;
}
//System.out.println( "debug 10.2" );
boolean lastBucketInDate = PeriodDateMap.getInstance().
isLastBucketInDate(
PeriodDateMap.getInstance().getDateBucketBelongsTo(
lastSchedule.getBucketID()),
lastSchedule.getBucketID());
//System.out.println( "debug 10.3" );
if (rsc.getResourceHours(lastSchedule.getBucketID()) * 1.05 >=
1.0 / rscUse.getUPH()
|| lastBucketInDate) {
if (rsc.getResourceHours(lastSchedule.getBucketID()) < -2.0)
continue;
lastSchedule.augmentStarts();
rsc.consumeCapacity(lastSchedule.getBucketID(),
1.0 / rscUse.getUPH());
decimal -= 1.0;
lastIndex = j;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -