create my nribin code for logistf ,does it really work? - logistf

i need to creat my own nribin code , it can be used for logistf package outcome, i maybe work,please give me some advise!!!
i change z.std = mdl.std$x[,-1] to z.std = mdl.std$x
and cancle: link = mdl.std$family[[2]] and family=binomial(link),
the whole code is:
nribin_LTY <-
function (event=NULL, mdl.std=NULL, mdl.new=NULL, z.std=NULL, z.new=NULL, p.std=NULL, p.new=NULL,
updown='category', cut=NULL, link='logit', niter=1000, alpha=0.05, msg=TRUE) {
##
## type of calculation
flag.mdl = !is.null(mdl.std) && !is.null(mdl.new)
flag.prd = !is.null(z.std) && !is.null(z.new)
flag.rsk = !is.null(p.std) && !is.null(p.new)
##
## check standard & new model
if (flag.mdl) {
if (is.null(event)) event = as.numeric(mdl.std$y)
if (is.null(mdl.std$x) || is.null(mdl.new$x))
stop("\n\nmodel object does not contain predictors. pls set x=TRUE for model calculation.\n\n")
z.std = mdl.std$x
z.new = mdl.new$x
mdl.std = glm(event ~ ., data=as.data.frame(cbind(event, z.std)))
mdl.new = glm(event ~ ., data=as.data.frame(cbind(event, z.new)))
} else if (flag.prd) {
mdl.std = glm(event ~ ., data=as.data.frame(cbind(event, z.std)))
mdl.new = glm(event ~ ., data=as.data.frame(cbind(event, z.new)))***
message("\nSTANDARD prediction model:")
print(summary(mdl.std)$coef)
message("\nNEW prediction model:")
print(summary(mdl.new)$coef)
} else if (!flag.mdl && !flag.prd && !flag.rsk) {
stop("\n\neither one of 'event, z.std, z.new', 'event, p.std, p.new', and 'mdl.std, mdl.new' should be specified.\n\n")
}
if (is.null(cut))
stop("\n\n'cut' is empty")
objs = list(mdl.std, mdl.new, z.std, z.new, p.std, p.new)
##
## DH & DL
wk = get.uppdwn.bin(event, objs, flag.mdl, flag.prd, flag.rsk, updown, cut, link, msg=msg)
upp = wk[[1]]
dwn = wk[[2]]
ret = list(mdl.std=mdl.std, mdl.new=mdl.new, p.std=wk[[3]], p.new=wk[[4]], up=upp, down=dwn, rtab=wk[[5]], rtab.case=wk[[6]], rtab.ctrl=wk[[7]])
##
## point estimation
message("\nNRI estimation:")
est = nribin.count.main(event, upp, dwn)
message("Point estimates:")
result = data.frame(est)
names(result) = 'Estimate'
row.names(result) = c('NRI','NRI+','NRI-','Pr(Up|Case)','Pr(Down|Case)','Pr(Down|Ctrl)','Pr(Up|Ctrl)')
print(result)
##
## interval estimation
if (niter > 0) {
message("\nNow in bootstrap..")
ci = rep(NA, 14)
N = length(event)
samp = matrix(NA, niter, 7)
colnames(samp) = c('NRI','NRI+','NRI-','Pr(Up|Case)','Pr(Down|Case)','Pr(Down|Ctrl)','Pr(Up|Ctrl)')
for (b in 1:niter) {
f = as.integer(runif(N, 0, N)) + 1
objs = list(mdl.std, mdl.new, z.std[f,], z.new[f,], p.std[f], p.new[f])
wk = get.uppdwn.bin(event[f], objs, flag.mdl, flag.prd, flag.rsk, updown, cut, link, msg=FALSE)
upp = wk[[1]]
dwn = wk[[2]]
samp[b,] = nribin.count.main(event[f], upp, dwn)
}
ret = c(ret, list(bootstrapsample=samp))
ci = as.numeric(apply(samp, 2, quantile, c(alpha/2, 1-alpha/2), na.rm=TRUE, type=2))
se = as.numeric(apply(samp, 2, sd))
message("\nPoint & Interval estimates:")
result = as.data.frame(cbind(est, se, matrix(ci, ncol=2, byrow=TRUE)))
names(result) = c('Estimate', 'Std.Error', 'Lower', 'Upper')
row.names(result) = c('NRI','NRI+','NRI-','Pr(Up|Case)','Pr(Down|Case)','Pr(Down|Ctrl)','Pr(Up|Ctrl)')
print(result)
}
invisible(c(list(nri=result), ret))
}

It is need to add variable matrix to logistf outcome,such as:
x.std=as.matrix(thromb2[,c(8,9,10,14,21,22,24,25,26)])
mstd = logistf(formula=fml.std, firth = FALSE,
data = thromb2, x=TRUE)
mstd =backward(mstd)
mstd$x <- x.std

Related

How to create multi infinity loops with coroutine in Kotlin

I have a method in viewmodel that I want to execute infinity till client stop that.
This loop should work for each button separately and stop that too.
But when I execute the loop for fourth time, application hangs.
How can I manage the loop and run it for four separate objects
This is my method in viewmodel:
fun getLocationInfinity(context: Context, tripId: Long, passengerId: Int) =
viewModelScope.launch {
val gpsTracker = LocationGpsTracker(context, 0, 0)
val netGpsTracker = LocationGpsTrackerNetwork(context)
var way = Way()
way.latitude1 = gpsTracker.getLatitude()
way.longitude1 = gpsTracker.getLongitude()
way.accuracy1 = gpsTracker.getAccuracy()
way.latitudeNet1 = netGpsTracker.getLatitude()
way.longitudeNet1 = netGpsTracker.getLongitude()
way.accuracyNet1 = netGpsTracker.getAccuracy()
while (isActive) {
if (_passengerSwitch.value?.get(passengerId - 1) == true) {
way.latitude2 = way.latitude1
way.longitude2 = way.longitude1
way.accuracy2 = way.accuracy1
way.latitudeNet2 = way.latitudeNet1
way.longitudeNet2 = way.longitudeNet1
way.accuracyNet2 = way.accuracyNet1
way.latitude1 = gpsTracker.getLatitude()
way.longitude1 = gpsTracker.getLongitude()
way.accuracy1 = gpsTracker.getAccuracy()
way.latitudeNet1 = netGpsTracker.getLatitude()
way.longitudeNet1 = netGpsTracker.getLongitude()
way.accuracyNet1 = netGpsTracker.getAccuracy()
_way.postValue(way)
val tripDetails = TripDetails(
latitude1 = way.latitude1,
latitude2 = way.latitude2,
longitude1 = way.longitude1,
longitude2 = way.longitude2,
accuracy1 = way.accuracy1,
accuracy2 = way.accuracy2,
latitudeNet1 = way.latitudeNet1,
latitudeNet2 = way.latitudeNet2,
longitudeNet1 = way.longitudeNet1,
longitudeNet2 = way.longitudeNet2,
accuracy1Net = way.accuracyNet1,
accuracy2Net = way.accuracyNet2,
distance = null,
isCalculated = false,
tripId = tripId.toInt(),
isEnded = false
)
localRepository.insertLocation(tripDetails)
delay(2000)
}
}
}
The delay() call needs to be outside your if-block. Otherwise, if the condition is false, this loop will never suspend so it never relinquishes the thread.

2 object of same type returns true when != checked

I am using model.GetType().GetProperties() with foreach to compare properties of 2 object of same class.
like this
foreach (var item in kayit.GetType().GetProperties())
{
var g = item.GetValue(plu);
var b = item.GetValue(kayit);
if (g is string && b is string&& g!=b)
{
a += item.Name + "*";
}
else if (g is DateTime&& b is DateTime&& g!=b)
{
a += item.Name + "*";
}
}
But the problem is even if they have the same value g!=b returns a true all the time. I have used a break point to prove this and they are literally same thing. Actually I am taking the value putting it in textbox then creating another class after button click and comaring to see the changed properties. So even if I don't change anything it doesn't read the mas equals. Can someone help me about this please?
more info:
I get the plu from database and populate my control with it:
txtorder.Text = plu.OrderNo;
dtporder.Value = nulldate(plu.OrderDate);
dtp1fit.Value = nulldate(plu.FirstFitDate);
dtp1yorum.Value = nulldate(plu.FirstCritDate);
dtp2fit.Value = nulldate(plu.SecondFitDate);
dtp2yorum.Value = nulldate(plu.SecondCritDate);
dtpsizeset.Value = nulldate(plu.SizeSetDate);
dtpsizesetok.Value = nulldate(plu.SizeSetOkDate);
dtpkumasplan.Value = nulldate(plu.FabricOrderByPlan);
txtTedarikci.Text = plu.Fabric_Supplier;
dtpkumasFP.Value = nulldate(plu.FabricOrderByFD);
dtpfabarrive.Value = nulldate(plu.FabricArrive);
dtpbulk.Value = nulldate(plu.BulkFabricDate);
dtpbulkok.Value = nulldate(plu.BulkConfirmDate);
dtpaccessory.Value = nulldate(plu.AccessoriesDate);
dtpaccessoryarrive.Value = nulldate(plu.AccessoriesArriveDate);
dtpcutok.Value = nulldate(plu.ProductionStartConfirmation);
dtpcutstart.Value = nulldate(plu.ProductionStart);
dtpshipmentdate.Value = nulldate(plu.ShipmentDate);
dtpshipmentsample.Value = nulldate(plu.ShipmentSampleDate);
dtpshippedon.Value = nulldate(plu.Shippedon);
nulldate is just a method where I change null values to my default value.
And this is what I do after button click:
var kayit = new uretim();
kayit.OrderNo = txtorder.Text.ToUpper();
kayit.OrderDate = vdat(dtporder.Value);
kayit.FirstFitDate = vdat(dtp1fit.Value);
kayit.FirstCritDate = vdat(dtp1yorum.Value);
kayit.SecondFitDate = vdat(dtp2fit.Value);
kayit.SecondCritDate = vdat(dtp2yorum.Value);
kayit.SizeSetDate = vdat(dtpsizeset.Value);
kayit.SizeSetOkDate = vdat(dtpsizesetok.Value);
kayit.FabricOrderByPlan = vdat(dtpkumasplan.Value);
kayit.Fabric_Supplier = txtTedarikci.Text;
kayit.FabricOrderByFD = vdat(dtpkumasFP.Value);
kayit.FabricArrive = vdat(dtpfabarrive.Value);
kayit.BulkFabricDate = vdat(dtpbulk.Value);
kayit.BulkConfirmDate = vdat(dtpbulkok.Value);
kayit.AccessoriesDate = vdat(dtpaccessory.Value);
kayit.AccessoriesArriveDate = vdat(dtpaccessoryarrive.Value);
kayit.ProductionStartConfirmation = vdat(dtpcutok.Value);
kayit.ProductionStart = vdat(dtpcutstart.Value);
kayit.ShipmentDate = vdat(dtpshipmentdate.Value);
kayit.ShipmentSampleDate = vdat(dtpshipmentsample.Value);
kayit.Shippedon = vdat(dtpshippedon.Value);
kayit.Status = true;
kayit.WrittenDate = DateTime.Now;
kayit.GuidKey = plu.GuidKey != null ? plu.GuidKey : Guid.NewGuid().ToString("N");
I have proven by breakpoint that values are actually same. But the != check retruns a true.
When you are doing
g != b
compiler doesn't know that these objects are strings to compare so it compares their references. You can do:
g.Equals(b) //be carefull if one of them is null
or
g.ToString() != b.ToString()
EDIT
You can compare them after you check the type:
if (g is string && b is string)
{
if( g.ToString() != b.ToString() ){
}
}

Error: Cannot convert array of data to (class)

I'm still rather new to JS and GAS and I'm afraid I don't understand arrays real well yet. Your help is greatly appreciated.
Prior to this script, I have another script that pulls information from a list into a spreadsheet that is formatted to look like an invoice. The user then makes changes to the invoice and saves that changes back again to the exact same line that the data was pulled from. This is simply a way of updating changes to the invoice in a user-friendly format.
When I run my script below, I get an error saying that it "Cannot convert"...a list of the data in the array..." to (class)"...the name of the file.
I'm afraid I don't know enough about array classes to solve this problem. I looked for other questions and answers to this same problem, but if I found one, I didn't understand it well enough to apply it to my situation.
The error is happening on line 133 (oh, so close to running the whole script).
function overwriteInvoice() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Invoice");
//start change customer name into customer code
var customerName = sheet.getRange('I2').getValue();
var ccsheet = ss.getSheetByName("CustomerCodes");
var lastRow = ccsheet.getLastRow();
//check how many rows it found
Logger.log("lastRow: " + lastRow);
var lookUp = ccsheet.getRange(2, 1, lastRow, 3).getValues();
for (nn=0; nn<lookUp.length; ++nn) {
if (lookUp[nn][0] == customerName) {break}
}
var customerCode = lookUp[nn][1];
//check customer code to make sure it is returning correct info.
Logger.log("customerCode: " + customerCode);
//end change customer name into customer code
//start build array
var arrayOfData = [];
arrayOfData[0] = sheet.getRange('G2');//invoiceorquote
arrayOfData[1] = sheet.getRange('C10');//invoicequote number
arrayOfData[2] = sheet.getRange('C9');//date
arrayOfData[3] = customerCode;//customer code DON'T CHANGE THIS
arrayOfData[4] = sheet.getRange('I9'); //joblotcode
arrayOfData[5] = sheet.getRange('J27');//total
arrayOfData[6] = sheet.getRange('L32');//invoice paid
arrayOfData[7] = sheet.getRange('B30');//notes
arrayOfData[8] = sheet.getRange('B13');//area13;
arrayOfData[9] = sheet.getRange('D13');//description13;
arrayOfData[10] = sheet.getRange('I13');//quantity13;
arrayOfData[11] = sheet.getRange('J13');//units13;
arrayOfData[12] = sheet.getRange('K13');//pricePerUnit13;
arrayOfData[13] = sheet.getRange('L13');//subtotal13;
arrayOfData[14] = sheet.getRange('B14');//area14;
arrayOfData[15] = sheet.getRange('D14');//description14;
arrayOfData[16] = sheet.getRange('I14');//quantity14;
arrayOfData[17] = sheet.getRange('J14');//units14;
arrayOfData[18] = sheet.getRange('K14');//pricePerUnit14;
arrayOfData[19] = sheet.getRange('L14');//subtotal14;
arrayOfData[20] = sheet.getRange('B15');//area15;
arrayOfData[21] = sheet.getRange('D15');//description15;
arrayOfData[22] = sheet.getRange('I15');//quantity15;
arrayOfData[23] = sheet.getRange('J15');//units15 ;
arrayOfData[24] = sheet.getRange('K15');//pricePerUnit15 ;
arrayOfData[25] = sheet.getRange('L15');//subtotal15 ;
arrayOfData[26] = sheet.getRange('B16');//area16 ;
arrayOfData[27] = sheet.getRange('D16');//description16 ;
arrayOfData[28] = sheet.getRange('I16');//quantity16 ;
arrayOfData[29] = sheet.getRange('J16');//units16 ;
arrayOfData[30] = sheet.getRange('K16');//pricePerUnit16 ;
arrayOfData[31] = sheet.getRange('L16');//subtotal16 ;
arrayOfData[32] = sheet.getRange('B17');//area17 ;
arrayOfData[33] = sheet.getRange('D17');//description17 ;
arrayOfData[34] = sheet.getRange('I17');//quantity17 ;
arrayOfData[35] = sheet.getRange('J17');//units17 ;
arrayOfData[36] = sheet.getRange('K17');//pricePerUnit17 ;
arrayOfData[37] = sheet.getRange('L17');//subtotal17 ;
arrayOfData[38] = sheet.getRange('B18');//area18 ;
arrayOfData[39] = sheet.getRange('D18');//description18 ;
arrayOfData[40] = sheet.getRange('I18');//quantity18 ;
arrayOfData[41] = sheet.getRange('J18');//units18 ;
arrayOfData[42] = sheet.getRange('K18');//pricePerUnit18 ;
arrayOfData[43] = sheet.getRange('L18');//subtotal18 ;
arrayOfData[44] = sheet.getRange('B19');//area19 ;
arrayOfData[45] = sheet.getRange('D19');//description19 ;
arrayOfData[46] = sheet.getRange('I19');//quantity19 ;
arrayOfData[47] = sheet.getRange('J19');//units19 ;
arrayOfData[48] = sheet.getRange('K19');//pricePerUnit19 ;
arrayOfData[49] = sheet.getRange('L19');//subtotal19 ;
arrayOfData[50] = sheet.getRange('B20');//area20 ;
arrayOfData[51] = sheet.getRange('D20');//description20 ;
arrayOfData[52] = sheet.getRange('I20');//quantity20 ;
arrayOfData[53] = sheet.getRange('J20');//units20 ;
arrayOfData[54] = sheet.getRange('K20');//pricePerUnit20 ;
arrayOfData[55] = sheet.getRange('L20');//subtotal20 ;
arrayOfData[56] = sheet.getRange('B21');//area21 ;
arrayOfData[57] = sheet.getRange('D21');//description21 ;
arrayOfData[58] = sheet.getRange('I21');//quantity21 ;
arrayOfData[59] = sheet.getRange('J21');//units21 ;
arrayOfData[60] = sheet.getRange('K21');//pricePerUnit21 ;
arrayOfData[61] = sheet.getRange('L21');//subtotal21 ;
arrayOfData[62] = sheet.getRange('B22');//area22 ;
arrayOfData[63] = sheet.getRange('D22');//description22 ;
arrayOfData[64] = sheet.getRange('I22');//quantity22 ;
arrayOfData[65] = sheet.getRange('J22');//units22 ;
arrayOfData[66] = sheet.getRange('K22');//pricePerUnit22 ;
arrayOfData[67] = sheet.getRange('L22');//subtotal22 ;
arrayOfData[68] = sheet.getRange('B23');//area23 ;
arrayOfData[69] = sheet.getRange('D23');//description23 ;
arrayOfData[70] = sheet.getRange('I23');//quantity23 ;
arrayOfData[71] = sheet.getRange('J23');//units23 ;
arrayOfData[72] = sheet.getRange('K23');//pricePerUnit23 ;
arrayOfData[73] = sheet.getRange('L23');//subtotal23 ;
arrayOfData[74] = sheet.getRange('B24');//area24 ;
arrayOfData[75] = sheet.getRange('D24');//description24 ;
arrayOfData[76] = sheet.getRange('I24');//quantity24 ;
arrayOfData[77] = sheet.getRange('J24');//units24 ;
arrayOfData[78] = sheet.getRange('K24');//pricePerUnit24 ;
arrayOfData[79] = sheet.getRange('L24');//subtotal24 ;
//end build array
//start find correct row
var searchFor = sheet.getRange("C10").getValue();
var invoiceRecord = ss.getSheetByName("InvoiceRecord");
var lastRow = invoiceRecord.getLastRow();
//verify last row
Logger.log("lastRow: " + lastRow);
//create an array of values to search
var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues();
//start search the array
for (jj=0; jj<searchArea.length; ++jj) {
if (searchArea[jj][1]==searchFor) {break};
}
var copyToRow = searchArea[jj];
//end find the correct row
//ERROR!
invoiceRecord.getRange(copyToRow, 1, 1, arrayOfData.length).setValues(arrayOfData);
//ERROR!
ui.alert('Invoice Changes Saved', ui.ButtonSet.OK);
}
Thank you so much for your help.
Update
I am so frustrated by this problem that I decided to take a different tact to narrow down the cause. I removed the array entirely and assigned each value to a variable in order to see if the array is the problem. Apparently, it is not. The results when I run this code now say error: "Cannot convert NaN to (class). (line 140, file "OverwriteExistingInvoice")"
function overwriteInvoice() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Invoice");
//start change customer name into customer code
var customerName = sheet.getRange('I2').getValue();
var ccsheet = ss.getSheetByName("CustomerCodes");
var lastRow = ccsheet.getLastRow();
//check how many rows it found
Logger.log("lastRow: " + lastRow);
var lookUp = ccsheet.getRange(2, 1, lastRow-2, 3).getValues();
var nn=0
for (nn=0; nn<lookUp.length; ++nn) {
if (lookUp[nn][0] == customerName) {break}
}
var customerCode = lookUp[nn][1];
//check customer code to make sure it is returning correct info.
Logger.log("customerCode: " + customerCode);
//end change customer name into customer code
//start build array
var column0 = sheet.getRange('G2').getValue();//invoiceorquote
var column1 = sheet.getRange('C10').getValue();//invoicequote number
var column2 = sheet.getRange('C9').getValue();//date
var column3 = customerCode;//customer code DON'T CHANGE THIS
var column4 = sheet.getRange('I9').getValue(); //joblotcode
var column5 = sheet.getRange('J27').getValue();//total
var column6 = sheet.getRange('L32').getValue();//invoice paid
var column7 = sheet.getRange('B30').getValue();//notes
var column8 = sheet.getRange('B13').getValue();//area13;
var column9 = sheet.getRange('D13').getValue();//description13;
var column10 = sheet.getRange('I13').getValue();//quantity13;
var column11 = sheet.getRange('J13').getValue();//units13;
var column12 = sheet.getRange('K13').getValue();//pricePerUnit13;
var column13 = sheet.getRange('L13').getValue();//subtotal13;
var column14 = sheet.getRange('B14').getValue();//area14;
var column15 = sheet.getRange('D14').getValue();//description14;
var column16 = sheet.getRange('I14').getValue();//quantity14;
var column17 = sheet.getRange('J14').getValue();//units14;
var column18 = sheet.getRange('K14').getValue();//pricePerUnit14;
var column19 = sheet.getRange('L14').getValue();//subtotal14;
var column20 = sheet.getRange('B15').getValue();//area15;
var column21 = sheet.getRange('D15').getValue();//description15;
var column22 = sheet.getRange('I15').getValue();//quantity15;
var column23 = sheet.getRange('J15').getValue();//units15 ;
var column24 = sheet.getRange('K15').getValue();//pricePerUnit15 ;
var column25 = sheet.getRange('L15').getValue();//subtotal15 ;
var column26 = sheet.getRange('B16').getValue();//area16 ;
var column27 = sheet.getRange('D16').getValue();//description16 ;
var column28 = sheet.getRange('I16').getValue();//quantity16 ;
var column29 = sheet.getRange('J16').getValue();//units16 ;
var column30 = sheet.getRange('K16').getValue();//pricePerUnit16 ;
var column31 = sheet.getRange('L16').getValue();//subtotal16 ;
var column32 = sheet.getRange('B17').getValue();//area17 ;
var column33 = sheet.getRange('D17').getValue();//description17 ;
var column34 = sheet.getRange('I17').getValue();//quantity17 ;
var column35 = sheet.getRange('J17').getValue();//units17 ;
var column36 = sheet.getRange('K17').getValue();//pricePerUnit17 ;
var column37 = sheet.getRange('L17').getValue();//subtotal17 ;
var column38 = sheet.getRange('B18').getValue();//area18 ;
var column39 = sheet.getRange('D18').getValue();//description18 ;
var column40 = sheet.getRange('I18').getValue();//quantity18 ;
var column41 = sheet.getRange('J18').getValue();//units18 ;
var column42 = sheet.getRange('K18').getValue();//pricePerUnit18 ;
var column43 = sheet.getRange('L18').getValue();//subtotal18 ;
var column44 = sheet.getRange('B19').getValue();//area19 ;
var column45 = sheet.getRange('D19').getValue();//description19 ;
var column46 = sheet.getRange('I19').getValue();//quantity19 ;
var column47 = sheet.getRange('J19').getValue();//units19 ;
var column48 = sheet.getRange('K19').getValue();//pricePerUnit19 ;
var column49 = sheet.getRange('L19').getValue();//subtotal19 ;
var column50 = sheet.getRange('B20').getValue();//area20 ;
var column51 = sheet.getRange('D20').getValue();//description20 ;
var column52 = sheet.getRange('I20').getValue();//quantity20 ;
var column53 = sheet.getRange('J20').getValue();//units20 ;
var column54 = sheet.getRange('K20').getValue();//pricePerUnit20 ;
var column55 = sheet.getRange('L20').getValue();//subtotal20 ;
var column56 = sheet.getRange('B21').getValue();//area21 ;
var column57 = sheet.getRange('D21').getValue();//description21 ;
var column58 = sheet.getRange('I21').getValue();//quantity21 ;
var column59 = sheet.getRange('J21').getValue();//units21 ;
var column60 = sheet.getRange('K21').getValue();//pricePerUnit21 ;
var column61 = sheet.getRange('L21').getValue();//subtotal21 ;
var column62 = sheet.getRange('B22').getValue();//area22 ;
var column63 = sheet.getRange('D22').getValue();//description22 ;
var column64 = sheet.getRange('I22').getValue();//quantity22 ;
var column65 = sheet.getRange('J22').getValue();//units22 ;
var column66 = sheet.getRange('K22').getValue();//pricePerUnit22 ;
var column67 = sheet.getRange('L22').getValue();//subtotal22 ;
var column68 = sheet.getRange('B23').getValue();//area23 ;
var column69 = sheet.getRange('D23').getValue();//description23 ;
var column70 = sheet.getRange('I23').getValue();//quantity23 ;
var column71 = sheet.getRange('J23').getValue();//units23 ;
var column72 = sheet.getRange('K23').getValue();//pricePerUnit23 ;
var column73 = sheet.getRange('L23').getValue();//subtotal23 ;
var column74 = sheet.getRange('B24').getValue();//area24 ;
var column75 = sheet.getRange('D24').getValue();//description24 ;
var column76 = sheet.getRange('I24').getValue();//quantity24 ;
var column77 = sheet.getRange('J24').getValue();//units24 ;
var column78 = sheet.getRange('K24').getValue();//pricePerUnit24 ;
var column79 = sheet.getRange('L24').getValue();//subtotal24 ;
//end build array
//start find correct row
var searchFor = sheet.getRange("C10").getValue();
var invoiceRecord = ss.getSheetByName("InvoiceRecord");
var lastRow = invoiceRecord.getLastRow();
//verify last row
Logger.log("lastRow: " + lastRow);
//create an array of values to search
var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues();
//start search the array
var jj=0
for (jj=0; jj<searchArea.length; ++jj) {
if (searchArea[jj][1]==searchFor) {break};
}
Logger.log('jj value: ' + jj);
var copyToRow = searchArea[jj];
Logger.log('copyToRow: ' + copyToRow);
//end find correct row
//start copy over same entry
//error on next line
invoiceRecord.getRange(copyToRow-1, 1).setValue(column0);
//error on above line
ui.alert('Invoice Changes Saved', ui.ButtonSet.OK);
}
I really appreciate all the help thus far. I am about to tear my hair out!
UPDATE
This is the code that finally worked correctly.
function overwriteInvoice() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Invoice");
//start change customer name into customer code
var customerName = sheet.getRange('I2').getValue();
var ccsheet = ss.getSheetByName("CustomerCodes");
var lastRow = ccsheet.getLastRow();
//check how many rows it found
Logger.log("lastRow: " + lastRow);
var lookUp = ccsheet.getRange(2, 1, lastRow-2, 3).getValues();
var nn=0
for (nn=0; nn<lookUp.length; ++nn) {
if (lookUp[nn][0] == customerName) {break}
}
var customerCode = lookUp[nn][1];
//check customer code to make sure it is returning correct info.
Logger.log("customerCode: " + customerCode);
//end change customer name into customer code
//start build array
var arrayOfData = [];
arrayOfData[0] = sheet.getRange('G2').getValue();//invoiceorquote
arrayOfData[1] = sheet.getRange('C10').getValue();//invoicequote number
arrayOfData[2] = sheet.getRange('C9').getValue();//date
arrayOfData[3] = customerCode;//customer code DON'T CHANGE THIS
arrayOfData[4] = sheet.getRange('I9').getValue(); //joblotcode
arrayOfData[5] = sheet.getRange('J27').getValue();//total
arrayOfData[6] = sheet.getRange('L32').getValue();//invoice paid
arrayOfData[7] = sheet.getRange('B30').getValue();//notes
arrayOfData[8] = sheet.getRange('B13').getValue();//area13;
arrayOfData[9] = sheet.getRange('D13').getValue();//description13;
arrayOfData[10] = sheet.getRange('I13').getValue();//quantity13;
arrayOfData[11] = sheet.getRange('J13').getValue();//units13;
arrayOfData[12] = sheet.getRange('K13').getValue();//pricePerUnit13;
arrayOfData[13] = sheet.getRange('L13').getValue();//subtotal13;
arrayOfData[14] = sheet.getRange('B14').getValue();//area14;
arrayOfData[15] = sheet.getRange('D14').getValue();//description14;
arrayOfData[16] = sheet.getRange('I14').getValue();//quantity14;
arrayOfData[17] = sheet.getRange('J14').getValue();//units14;
arrayOfData[18] = sheet.getRange('K14').getValue();//pricePerUnit14;
arrayOfData[19] = sheet.getRange('L14').getValue();//subtotal14;
arrayOfData[20] = sheet.getRange('B15').getValue();//area15;
arrayOfData[21] = sheet.getRange('D15').getValue();//description15;
arrayOfData[22] = sheet.getRange('I15').getValue();//quantity15;
arrayOfData[23] = sheet.getRange('J15').getValue();//units15 ;
arrayOfData[24] = sheet.getRange('K15').getValue();//pricePerUnit15 ;
arrayOfData[25] = sheet.getRange('L15').getValue();//subtotal15 ;
arrayOfData[26] = sheet.getRange('B16').getValue();//area16 ;
arrayOfData[27] = sheet.getRange('D16').getValue();//description16 ;
arrayOfData[28] = sheet.getRange('I16').getValue();//quantity16 ;
arrayOfData[29] = sheet.getRange('J16').getValue();//units16 ;
arrayOfData[30] = sheet.getRange('K16').getValue();//pricePerUnit16 ;
arrayOfData[31] = sheet.getRange('L16').getValue();//subtotal16 ;
arrayOfData[32] = sheet.getRange('B17').getValue();//area17 ;
arrayOfData[33] = sheet.getRange('D17').getValue();//description17 ;
arrayOfData[34] = sheet.getRange('I17').getValue();//quantity17 ;
arrayOfData[35] = sheet.getRange('J17').getValue();//units17 ;
arrayOfData[36] = sheet.getRange('K17').getValue();//pricePerUnit17 ;
arrayOfData[37] = sheet.getRange('L17').getValue();//subtotal17 ;
arrayOfData[38] = sheet.getRange('B18').getValue();//area18 ;
arrayOfData[39] = sheet.getRange('D18').getValue();//description18 ;
arrayOfData[40] = sheet.getRange('I18').getValue();//quantity18 ;
arrayOfData[41] = sheet.getRange('J18').getValue();//units18 ;
arrayOfData[42] = sheet.getRange('K18').getValue();//pricePerUnit18 ;
arrayOfData[43] = sheet.getRange('L18').getValue();//subtotal18 ;
arrayOfData[44] = sheet.getRange('B19').getValue();//area19 ;
arrayOfData[45] = sheet.getRange('D19').getValue();//description19 ;
arrayOfData[46] = sheet.getRange('I19').getValue();//quantity19 ;
arrayOfData[47] = sheet.getRange('J19').getValue();//units19 ;
arrayOfData[48] = sheet.getRange('K19').getValue();//pricePerUnit19 ;
arrayOfData[49] = sheet.getRange('L19').getValue();//subtotal19 ;
arrayOfData[50] = sheet.getRange('B20').getValue();//area20 ;
arrayOfData[51] = sheet.getRange('D20').getValue();//description20 ;
arrayOfData[52] = sheet.getRange('I20').getValue();//quantity20 ;
arrayOfData[53] = sheet.getRange('J20').getValue();//units20 ;
arrayOfData[54] = sheet.getRange('K20').getValue();//pricePerUnit20 ;
arrayOfData[55] = sheet.getRange('L20').getValue();//subtotal20 ;
arrayOfData[56] = sheet.getRange('B21').getValue();//area21 ;
arrayOfData[57] = sheet.getRange('D21').getValue();//description21 ;
arrayOfData[58] = sheet.getRange('I21').getValue();//quantity21 ;
arrayOfData[59] = sheet.getRange('J21').getValue();//units21 ;
arrayOfData[60] = sheet.getRange('K21').getValue();//pricePerUnit21 ;
arrayOfData[61] = sheet.getRange('L21').getValue();//subtotal21 ;
arrayOfData[62] = sheet.getRange('B22').getValue();//area22 ;
arrayOfData[63] = sheet.getRange('D22').getValue();//description22 ;
arrayOfData[64] = sheet.getRange('I22').getValue();//quantity22 ;
arrayOfData[65] = sheet.getRange('J22').getValue();//units22 ;
arrayOfData[66] = sheet.getRange('K22').getValue();//pricePerUnit22 ;
arrayOfData[67] = sheet.getRange('L22').getValue();//subtotal22 ;
arrayOfData[68] = sheet.getRange('B23').getValue();//area23 ;
arrayOfData[69] = sheet.getRange('D23').getValue();//description23 ;
arrayOfData[70] = sheet.getRange('I23').getValue();//quantity23 ;
arrayOfData[71] = sheet.getRange('J23').getValue();//units23 ;
arrayOfData[72] = sheet.getRange('K23').getValue();//pricePerUnit23 ;
arrayOfData[73] = sheet.getRange('L23').getValue();//subtotal23 ;
arrayOfData[74] = sheet.getRange('B24').getValue();//area24 ;
arrayOfData[75] = sheet.getRange('D24').getValue();//description24 ;
arrayOfData[76] = sheet.getRange('I24').getValue();//quantity24 ;
arrayOfData[77] = sheet.getRange('J24').getValue();//units24 ;
arrayOfData[78] = sheet.getRange('K24').getValue();//pricePerUnit24 ;
arrayOfData[79] = sheet.getRange('L24').getValue();//subtotal24 ;
//end build array
//start find correct row
var searchFor = sheet.getRange("C10").getValue();
var invoiceRecord = ss.getSheetByName("InvoiceRecord");
var lastRow = invoiceRecord.getLastRow();
//verify last row
Logger.log("lastRow: " + lastRow);
//create an array of values to search
var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues();
//start search the array
var jj=0
for (jj=0; jj<searchArea.length; ++jj) {
if (searchArea[jj][1]==searchFor) {break};
}
Logger.log('jj value: ' + jj);
var copyToRow = jj+4;
Logger.log('copyToRow: ' + copyToRow);
//end find correct row
//start copy over the same entry
var outerArray = [];
outerArray.push(arrayOfData);
invoiceRecord.getRange(copyToRow, 1, 1, 80).setValues(outerArray);
ui.alert('Invoice Changes Saved', ui.ButtonSet.OK);
}
Add the getValue() method to all of the lines with:
arrayOfData[x] = sheet.getRange('XX');//What to get
Right now, a range object is being put into the array, and not a value.
Should be:
arrayOfData[x] = sheet.getRange('XX').getValue();//Note
Create an outer array, and put arrayOfData into it:
var outerArray = [];
outerArray.push(arrayOfData);
//getRange(Start row, start column, number of rows, number of columns)
invoiceRecord.getRange(copyToRow, 1, outerArray.length, outerArray[0].length)
.setValues(outerArray);
The setValues() method must have a two dimensional array. If this is for just one row of data, then there will only be one inner array.

Optimize matrices operations

I'm optimizing via Genetic Algorithm a machine simulator (of a MultiheadWeigher machine) in order to solve the well known "Setup problem". I based all the code on matricies but with the multiproduct case I think there is still some inefficiency...
Code
function [f] = MHW(position_matrix, HA, HB, HC)
global W_best_tot
global Function
global n_b_global
nComb = size(position_matrix,1);
dim = size(position_matrix,2);
WL = 241;
%SIMULATIONS VARIABLES
alpha = 0.123;
nSim = 3000;
CellUncertainty = 0.5 * 10^(-6);
%// Define Product Hopper allocation
WT_A = 130; WL_A = 129;
WT_B = 30; WL_B = 29;
%HC = 2;
WT_C = 90; WL_C = 89;
%// COMBINATION MATRIX
CombinantionMatrix_A = combn([0 1], HA);
CombinantionMatrix_B = combn([0 1], HB);
CombinantionMatrix_C = combn([0 1], HC);
if HA == 1
CombinantionMatrix_A = CombinantionMatrix_A.';
end
if HB == 1
CombinantionMatrix_B = CombinantionMatrix_B.';
end
if HC == 1
CombinantionMatrix_C = CombinantionMatrix_C.';
end
CombinantionMatrix_A_Transp = CombinantionMatrix_A.';
CombinantionMatrix_B_Transp = CombinantionMatrix_B.';
CombinantionMatrix_C_Transp = CombinantionMatrix_C.';
% OBJECTIVE FUNCTION COST COEFFICIENTS
Cu_A = 0.03; c_p = 0.6; c_f = 734; c_l = 3.2;
Cu_B = 0.09;
Cu_C = 0.04;
[HopperWeight UncertainWeight] = Weight(nComb, dim, alpha, ...
position_matrix, CellUncertainty);
HopperWeight_A = HopperWeight(:,1:HA);
HopperWeight_B = HopperWeight(:,HA+1:HA+HB);
HopperWeight_C = HopperWeight(:,HA+HB+1:HA+HB+HC);
UncertainWeight_A = UncertainWeight(:,1:HA);
UncertainWeight_B = UncertainWeight(:,HA+1:HA+HB);
UncertainWeight_C = UncertainWeight(:,HA+HB+1:HA+HB+HC);
W_best_tot = zeros(nComb, nSim);
W_best_ABC = zeros(nComb, 3, nSim);
for ii=1:nSim
W_A = HopperWeight_A * CombinantionMatrix_A_Transp;
W_B = HopperWeight_B * CombinantionMatrix_B_Transp;
W_C = HopperWeight_C * CombinantionMatrix_C_Transp;
W_Unc_A = UncertainWeight_A * CombinantionMatrix_A_Transp;
W_Unc_B = UncertainWeight_B * CombinantionMatrix_B_Transp;
W_Unc_C = UncertainWeight_C * CombinantionMatrix_C_Transp;
[~,comb_A] = min(abs(W_Unc_A - WT_A),[],2);
[~,comb_B] = min(abs(W_Unc_B - WT_B),[],2);
[~,comb_C] = min(abs(W_Unc_C - WT_C),[],2);
W_best_A = W_A(sub2ind_mod(size(W_A),1:size(W_A,1),comb_A.')).';
W_best_B = W_B(sub2ind_mod(size(W_B),1:size(W_B,1),comb_B.')).';
W_best_C = W_C(sub2ind_mod(size(W_C),1:size(W_C,1),comb_C.')).';
W_best_ABC(:,:,ii) = [W_best_A W_best_B W_best_C];
W_best_tot(:,ii) = sum(W_best_ABC(:,:,ii),2);
[HopperWeight_2_A UncertainWeight_2_A] = Weight(nComb, HA, alpha, ...
position_matrix(:,1:HA), CellUncertainty);
[HopperWeight_2_B UncertainWeight_2_B] = Weight(nComb, HB, alpha, ...
position_matrix(:,HA+1:HA+HB), CellUncertainty);
[HopperWeight_2_C UncertainWeight_2_C] = Weight(nComb, HC, alpha, ...
position_matrix(:,HA+HB+1:HA+HB+HC), CellUncertainty);
idx = CombinantionMatrix_A(comb_A,:)~=0;
HopperWeight_A(idx) = HopperWeight_2_A(idx);
UncertainWeight_A(idx) = UncertainWeight_2_A(idx);
idx = CombinantionMatrix_B(comb_B,:)~=0;
HopperWeight_B(idx) = HopperWeight_2_B(idx);
UncertainWeight_B(idx) = UncertainWeight_2_B(idx);
idx = CombinantionMatrix_C(comb_C,:)~=0;
HopperWeight_C(idx) = HopperWeight_2_C(idx);
UncertainWeight_C(idx) = UncertainWeight_2_C(idx);
clear HopperWeight_2_A HopperWeight_2_B HopperWeight_2_C ...
UncertainWeight_2_A UncertainWeight_2_B UncertainWeight_2_C;
end
n_b = logical(W_best_tot >= WL);
n_bA = logical(reshape(W_best_ABC(:,1,:), nComb, nSim) >= WL_A);
n_bB = logical(reshape(W_best_ABC(:,2,:), nComb, nSim) >= WL_B);
n_bC = logical(reshape(W_best_ABC(:,3,:), nComb, nSim) >= WL_C);
n_b_global = sum(n_b .* n_bA .* n_bB .* n_bC, 2);
GAvg_A = sum(reshape(W_best_ABC(:,1,:), nComb, nSim).*(reshape(...
W_best_ABC(:,1,:), nComb, nSim) > WT_A),2)./sum(reshape(...
W_best_ABC(:,1,:), nComb, nSim) > WT_A,2);
GAvg_B = sum(reshape(W_best_ABC(:,2,:), nComb, nSim).*(reshape(...
W_best_ABC(:,2,:), nComb, nSim) > WT_B),2)./sum(reshape(...
W_best_ABC(:,2,:), nComb, nSim) > WT_B,2);
GAvg_C = sum(reshape(W_best_ABC(:,3,:), nComb, nSim).*(reshape(...
W_best_ABC(:,3,:), nComb, nSim) > WT_C),2)./sum(reshape(...
W_best_ABC(:,3,:), nComb, nSim) > WT_C,2);
f = Cu_A .* GAvg_A + Cu_B .* GAvg_B + Cu_C .* GAvg_C + (nSim./...
n_b_global) .* c_p + (c_f./n_b_global) + ((nSim - n_b_global)./...
n_b_global) .* c_l;
Function = f;
Profiler
This is the Main Profiler and these are: the MHW function and the Weight function. The main problems are in the Weight since it's called 3000times for each GA generation...Above the Weight function code:
Weight Function Code
function [ HopperWeight UncertainWeight ] = Weight( nComb, H, alpha, AllComb, CellUncertainty )
HopperWeight = randn(nComb,H) * alpha;
HopperWeight = (1+HopperWeight) .* AllComb;
idx = HopperWeight<0;
random = randn(sum(idx(:)), 1);
HopperWeight(idx) = random .* ((1+alpha) .* AllComb(idx));
%ADD ERROR
RandomizeUncertainty = randn(nComb,H) * CellUncertainty;
UncertainWeight = abs((1+RandomizeUncertainty) .* HopperWeight);
end
Is there something that I am missing in order to optimize better the Weight function and in general the time consuming part in the MHW function? (If you need the GA launcher in order to try the MHW function use THIS code)
TIA

lights out game using CORONA SDK

am trying to devalope a lights out game with CORONA SDK
but am not able to figure out a way for looping it !!!
how many functions to create and the way to keep this going
here is my code (its dummy but a friend gave it to me as am trying to go on from there )
obj = nil
px = 35
py = 50
r = 22
xi = 60
yi = 60
x1y1 = display.newCircle(px+xi*0,py+yi*0,r) x1y1.id = "x1y1"
x2y1 = display.newCircle(px+xi*1,py+yi*0,r) x2y1.id = "x2y1"
x3y1 = display.newCircle(px+xi*2,py+yi*0,r) x3y1.id = "x3y1"
x4y1 = display.newCircle(px+xi*3,py+yi*0,r) x4y1.id = "x4y1"
x5y1 = display.newCircle(px+xi*4,py+yi*0,r) x5y1.id = "x5y1"
x1y2 = display.newCircle(px+xi*0,py+yi*1,r) x1y2.id = "x1y2"
x2y2 = display.newCircle(px+xi*1,py+yi*1,r) x2y2.id = "x2y2"
x3y2 = display.newCircle(px+xi*2,py+yi*1,r) x3y2.id = "x3y2"
x4y2 = display.newCircle(px+xi*3,py+yi*1,r) x4y2.id = "x4y2"
x5y2 = display.newCircle(px+xi*4,py+yi*1,r) x5y2.id = "x5y2"
x1y3 = display.newCircle(px+xi*0,py+yi*2,r) x1y3.id = "x1y3"
x2y3 = display.newCircle(px+xi*1,py+yi*2,r) x2y3.id = "x2y3"
x3y3 = display.newCircle(px+xi*2,py+yi*2,r) x3y3.id = "x3y3"
x4y3 = display.newCircle(px+xi*3,py+yi*2,r) x4y3.id = "x4y3"
x5y3 = display.newCircle(px+xi*4,py+yi*2,r) x5y3.id = "x5y3"
x1y4 = display.newCircle(px+xi*0,py+yi*3,r) x1y4.id = "x1y4"
x2y4 = display.newCircle(px+xi*1,py+yi*3,r) x2y4.id = "x2y4"
x3y4 = display.newCircle(px+xi*2,py+yi*3,r) x3y4.id = "x3y4"
x4y4 = display.newCircle(px+xi*3,py+yi*3,r) x4y4.id = "x4y4"
x5y4 = display.newCircle(px+xi*4,py+yi*3,r) x5y4.id = "x5y4"
x1y5 = display.newCircle(px+xi*0,py+yi*4,r) x1y5.id = "x1y5"
x2y5 = display.newCircle(px+xi*1,py+yi*4,r) x2y5.id = "x2y5"
x3y5 = display.newCircle(px+xi*2,py+yi*4,r) x3y5.id = "x3y5"
x4y5 = display.newCircle(px+xi*3,py+yi*4,r) x4y5.id = "x4y5"
x5y5 = display.newCircle(px+xi*4,py+yi*4,r) x5y5.id = "x5y5"
bb = {x1y1,x2y1,x3y1,x4y1,x5y1,x1y2,x2y2,x3y2,x4y2,x5y2,x1y3,x2y3,x3y3,x4y3,x5y3,x1y4,x2y4,x3y4,x4y4,x5y4,x1y5,x2y5,x3y5,x4y5,x5y5}
iClicked = 0
function click(e)
if(e.phase == "ended") then
--circleID = e.target.id
--whichCircle()
print(e.target.id)
obj = e.target
for u=1,25 do
if(obj==bb[u]) then
iClicked = u
end
end
if((iClicked-5) > 0 and (iClicked-5) < 26) then
bb[iClicked-5]:setFillColor(1,0,0)
end
if((iClicked-1) > 0 and (iClicked-1) < 26) then
bb[iClicked-1]:setFillColor(1,0,0)
end
obj:setFillColor(1,0,0)
if((iClicked+1) > 0 and (iClicked+1) < 26) then
bb[iClicked+1]:setFillColor(1,0,0)
end
if((iClicked+5) > 0 and (iClicked+5) < 26) then
bb[iClicked+5]:setFillColor(1,0,0)
end
end
end
for k=1,25 do
bb[k]:addEventListener("touch",click)
end
its all about having 25 circles and lighting them on and off but it doesnt seem to work for me
any good help will be great
Thanks
local myCircles = {}
for y = 1, 5 do
myCircles[y] = {}
for x = 1, 5 do
myCircles[y][x] = display.newCircle(px+xi*0,py+yi*4,r)
myCircles[y][x].id = .id = "x" .. x .. "y" .. y
end
end
or something like that.
Rob

Resources