## Python-constraint variables that take their name instead of the value - python-constraint

I want to multiply the range of each variable because I can't use more than 5 kg and 50 euros so I multiply the weight of each product and its value but instead, the program returns me an error that it's taking the value an instead of the range.
from constraint import *
problem = Problem()
problem.addVariable("a",range(0,51))
problem.addVariable("b",range(0,51))
problem.addVariable("c",range(0,11))
problem.addVariable("d",range(0,6))
problem.addConstraint(MaxSumConstraint(5000),['a'*340, 'b'*120,'c'*105,'d'*300])
problem.addConstraint(MaxSumConstraint(50),['a'*2,'b','c'*4,'d'*5])
soluciones = problem.getSolutions()
for solucion in soluciones:
solucion_string = ""
for i in range(4):
solucion_string += "("+str(i)+","+str(solucion[i])+")"
print(solucion_string)
print(len(soluciones))
I want to use the value of the range of each variable and multiply it.

## Related

### Extract coefficient and p-value for certain variable from regression loop

In Stata have applied a regression loop to 1000 metabolites (outcome), and the exposure variable is BMI. I also have other variables in the model. I would like to know how I can extract only the coefficient, p-value, and 95% CI for BMI if and only aif BMI is significant. And then I want to extract them into an Excel file. This is the code I have used. It informed me that there were, for example, 100 significant results. So I'm trying to figure out which 100 are those and extract them for BMI only, without other variables in the model. local counter = 0 local counter_pos = 0 local counter_neg = 0 foreach outcome of varlist B - Z { regress `outcome' bmi Age i.sex i.smoking i.lpa2c i.cholestrol matrix M = r(table) if M[4, 1] < 0.05 { local ++counter if _b[bmi] < 0 { local ++counter_neg } else { local ++counter_pos } } } display as text "Total of significant results: " as result `counter'

Here is a reproducible example showing how to send a variable name and some results to a new file. In your case, posting is conditional on a conventionally significant result; here it is unconditional. sysuse auto, clear local counter = 0 local negative = 0 local positive = 0 tempname RESULTS postfile `RESULTS' str32 varname coefficient using myresults.dta, replace foreach v in price mpg rep78 headroom trunk length turn displacement gear_ratio { quietly regress `v' weight local ++counter if _b[weight] < 0 local ++negative else local ++positive post `RESULTS' ("`v'") (_b[weight]) } di "variables tried: " `counter' di "negative relation: " `negative' di "positive relation: " `positive' postclose `RESULTS' use myresults, clear compress list

### How to sampling Data Frame?

The goal is to subsample a data frame. code: # 1 date is in type datatime dg.Yr_Mo_Dy = pd.to_datetime(dg.Yr_Mo_Dy, format='%Y%m%d') # 2 date is in index dg = dg.set_index(dg.Yr_Mo_Dy, drop = True) # 3 to group by 10 dg.resample('1AS').mean().mean() That gives: RPT 14.847325 VAL 12.914560 ROS 13.299624 KIL 7.199498 SHA 11.667734 BIR 8.054839 DUB 11.819355 CLA 9.512047 MUL 9.543208 CLO 10.053566 BEL 14.550520 MAL 18.028763 dtype: float6 The code takes every 10 values the 10 intermediate values and the average. Similarly, it is also possible to sum these 10 values by replacing mean() with sum(). However, what I want to do is not an average but a sampling. That is, to take all the values and only one without averaging, without summing the intermediate values. For example, the data: 1,2,3,4,5,6.. sampled by 0.5 gives 2,4,6... et non 1.5,2.5,3.5,5.5...

### formatting arrays with numbers and characters

I need help turning a Decay.txt file into an array, the first 1-3 and 5th columns are numbers, the third column is "time elapsed" in integers, but the 4th column is a unit of time (milliseconds, Months, Days) but its spelled out with characters. i cant get this mixed array (numbers and characters) to transfer over to matlab ideally id like to take the unit of time (4th column) change it to a seconds value, (i.e. hour becomes 3600 seconds) then multiply it by the number in the third column and have a final 4 column array where the 3rd column is simply the time elapsed in seconds anyone know how to do either of these things? ive tried Decay = fopen('Decay.txt','r'); B = fscanf(Decay,'%f',[5 inf]); which stops and has an error as soon as it hits the 4th column and Decay = fopen('Decay.txt','r'); B = fscanf(Decay,'%s',[5 inf]); but this just creates a 5x10000 column where every single number, decimal, and letter is on its own in its own cell of the array

Your first example Decay = fopen('Decay.txt','r'); B = fscanf(Decay,'%f',[5 inf]); Breaks because it can't scan the fourth column (a string) as a number (%f). Your second example doesn't have numbers because you're scanning everything as a string (%s). The correct specifier for your format should be '%f %f %f %s %f' However, if you call fscanfwith it, as per documentation: If formatSpec contains a combination of numeric and character specifiers, then A is numeric, of class double, and fscanf converts each text characters to its numeric equivalent. This occurs even when formatSpec explicitly skips all numeric fields (for example, formatSpec is '%*d %s'). So this input file: 50 1.2 99 s 0 6.42 1.2 3.11 min 1 22 37 0.01 h 2 Has this (undesired) output: >> fscanf(Decay, "%f %f %f %s %f", [5, inf]) ans = 50.0000 6.4200 110.0000 104.0000 1.2000 1.2000 1.0000 2.0000 99.0000 3.1100 22.0000 0 115.0000 109.0000 37.0000 0 0 105.0000 0.0100 0 That happens because a matrix in MATLAB can't have multiple data of different types. So, your best bet is scanning into a cell array, which can have any type inside. B = textscan(Decay, "%f %f %f %s %f") Returns a cell array with the appropriate types. You can use this output to convert the time data into the same unit and build your vectors/matrix. Columns 1, 2, 3 and 5 are trivial to do, just by accessing the cell B{n} for each n. Column 4 is a cell array of cells. In each internal cell, there's the string you have. You need to apply a conversion from string to the number you need. For my example, such function would look like: function scale = DecayScale(unit) switch(unit) case 's' scale = 1; case 'min' scale = 60; case 'h' scale = 3600; otherwise throw('Number format not recognized'); end end Which you could then apply to the 4th column like: timeScale = cellfun(#DecayScale, B{4}) And get the final time as: timeColumn = B{3} .* timeScale

### How to do SUM on array from outside file?

I'm newbie college student for programming studies, so recently i have task to calculate matrix from outside files for Gauss Jordan Numeric Method, in the txt file i provide has 10 (x) and (y) data, and declare with do functions to calculate the 10 data from the txt file each for x^2, x^3, x^4, xy, x^2y my question is : how to SUM (calculate total) each x^2, x^3 ... that was calculated by program ? i try do sum file in below and still got errors (the first argument of sum must not a scalar.) the Fortran apps i use was Plato cc from Silverfrost. I apologize if my english bad and my pogram looks funny. i have 10 data in my txt looks like these : (x) (y) 12 10 5 6 28 8 9 11 20 17 6 24 32 9 2 7 1 30 26 22 in program below i open these files and want each x and y i provide read and calculate to get x^2, x^3, x^4, xy, x^2y Program Gauss_Jordan Real x(10),y(10),xj,yj,xj2,xj3,xj4,xjyj,xj2yj Open (10, file='Data.txt') Do j = 1,10 Read(10,*) x(j), y(j) xj2 = x(j)**2 xj3 = x(j)**3 xj4 = x(j)**4 xjyj = x(j)*y(j) xj2yj = (x(j)**2)*y(j) Do k = 1,10 T(xj2) = SUM( xj2, dim=1) T(xj3) = SUM (xj3, dim=1) T(xj4) = SUM (xj4, dim=1) T(xjyj) = SUM (xjyj, dim=1) T(xj2yj) = SUM (xj2yj, dim=1) End Do End Do Close(10) End for T(xj2) I want to get one result scalar result from SUM the all xj^2 that program has been calculated. Like in excel was expected : (A) is 1st xj^2 value that has been calculated . . . until (J) is 10th xj^2 value that has been calculated sxj^2 = SUM(Xj^2) SUM (A-J)

The 'sum' intrinsic needs an array argument, which we can compute from the input arrays without using a loop, so your program could be: Program Gauss_Jordan Real x(10), y(10), x2(10), x3(10), x4(10), xy(10), x2y(10) Open(10, file='Data.txt') Do j = 1, 10 Read (10, *) x(j), y(j) End Do Close(10) x2 = x**2 x3 = x**3 x4 = x**4 xy = x*y x2y = (x**2)*y sx2 = SUM(x2) sx3 = SUM(x3) sx4 = SUM(x4) sxy = SUM(xy) sx2y = SUM(x2y) End

From what I see I think you are misunderstanding what the SUM intrinsic does. Since your example isn't storing xj2, xj3 etc. in arrays, SUM isn't going to be useful to you. Instead you could declare totals as scalars (as you described you wanted) and simply add the individual xj2 variables in a loop as in the example below. Also, you should get in the habit of using the implicit none declaration. It will save you from unexpected errors due to spelling mistakes. Program Gauss_Jordan implicit none Real x(10),y(10),xj,yj,xj2,xj3,xj4,xjyj,xj2yj real :: Txj2,Txj3,Txj4,Txjyj,Txj2yj integer :: j Txj2 = 0 Txj3 = 0 Txj4 = 0 Txjyj= 0 Txj2yj= 0 Open (10, file='Data.txt') Do j = 1,10 Read(10,*) x(j), y(j) xj2 = x(j)**2 xj3 = x(j)**3 xj4 = x(j)**4 xjyj = x(j)*y(j) xj2yj = (x(j)**2)*y(j) Txj2 = Txj2 + xj2 Txj3 = Txj3 + xj3 Txj4 = Txj4 + xj4 Txjyj = Txjyj + xjyj Txj2yj = Txj2yj + xj2yj End Do print *, 'Txj2 = ', Txj2 Close(10) End When I ran this I got the output below which is what I believe you intended: 3175

### matlab complex for-loop correlation calcul

This is the script that I have. It works till the ------ separation. Under I do not get any error from Matlab, but neither do I get a return of bestDx nor bestDy. Please help. (The first part is given just to put you in context) %% % Variables after running script Read_eA3_file.m %date_time_UTC %reflectivity %clutter_mask %Convert units dBZ = reflectivity * 0.375 - 30; dBZ_Mask = clutter_mask * 0.375 - 30; %Replace clutter values with NaN weather = NaN(size(dBZ)); %initialise to constant weather(dBZ>=dBZ_Mask) = dBZ(dBZ>=dBZ_Mask); %copy values when A >= B %Reduce to range -- those are 384x384 arrays dBZ_range = dBZ(:,:,1:16); %16:18 to 16:23 included weather_range = weather(:,:,1:16); %16:18 to 16:23 included weather1618 = weather(:,:,1); %16:18 map only weather1623 = weather(:,:,16); %16:23 map only % Plot maps image(imrotate(-weather1618,90)); %of 16:18 image(imrotate(-weather1623,90)); %of 16:23 %Find x,y of strongest dBZ %Since the value are all negative. I look for their minimun [M,I] = min(weather1618(:)); %for 16:18 [I_row, I_col] = ind2sub(size(weather1618),I); %values are 255 and 143 [M2,I2] = min(weather1623(:)); %for 16:23 [I2_row, I2_col] = ind2sub(size(weather1623),I2); %values are 223 and 7 %Calc displacement %I get a value of 139.7140 max_displ=sqrt((I2_row-I_row)^2+(I2_col-I_col)^2); %between 1618 and 1623 %% % -----Section below does not work; ONLY RUN the section ABOVE--------- %% Find Dx Dy for max_corr between two maps maxCoeff=0; weather1618Modified = zeros(384,384); %create weather array for time range %weather1618Modified(:) = {NaN}; % Matlab cannot mix cell & double %% for x = 1:384 for y = 1:384 %30 pixel appx. for Dx = -max_displ:30: max_displ for Dy = -max_displ:30: max_displ %Limit range of x+Dx and y+Dy to 1:384 if x+Dx<1 | y+Dy<1 | x+Dx>384 | y+Dy>384 continue %weather1618Modified is the forecasted weather1823 weather1618Modified(x+Dx,y+Dy) = weather1618(x,y) %Find the best correlation; Is corrcoef the right formula? newCoeff=corrcoef(weather1623,weather1618Modified); if newCoeff>maxCoeff maxCoeff=newCoeff; bestDx=Dx; bestDy=Dy; end end end end end end %% Calc displacement bestDispl = sqrt(bestDx^2+bestDy^2); %bestDispl for a 5 min frame %Calc speed speed = bestDispl/time;

You have to delete the continue statement after the first if (or place it somewhere else). The continue statement makes the program skip the remaining part of the for-loop and go directly to the next iteration. Therefore bestDx and bestDy will never be set. Documentation: https://se.mathworks.com/help/matlab/ref/continue.html